Quantcast
Channel: Parallel Computing in C++ and Native Code forum
Viewing all articles
Browse latest Browse all 856

Default parameters to restrict(amp) functions

$
0
0

The following code fails to compile. The error messages are :

Error1 error C3930: 'foo' : no overloaded function has restriction specifiers that are compatible with the ambient context ''

Error2 error C2660: 'f1' : function does not take 0 arguments

Error3 IntelliSense: amp-restricted function "int foo() restrict(amp)" (declared at line 5) must be called from an amp-restricted function

#include <amp.h>
#include <iostream>
using namespace std;

int foo() restrict(amp) { return 5; }

int f1(int x = foo()) restrict(amp) {
return x;
}

int main()
{
using namespace concurrency;

int a[10] = {0};
array_view<int> av(10, a);

parallel_for_each(av.extent, [=](index<1> i) restrict(amp) {
av[i] = f1();
});

for(unsigned i=0; i<10; ++i) {
cout << av[i] << "\n";
}
return 0;
}

Strangely, when I remove the restrict(amp) on foo(), and replace the call of f1() in the lambda with, say, 5, the program compiles fine. So what are the rules for function calls in default arguments to amp functions?


Viewing all articles
Browse latest Browse all 856

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>