/* Based on sollve_vv's tests/5.0/declare_target/test_nested_declare_target.c. */ | |
#define N 1024 | |
int a[N], b[N], c[N]; | |
int i = 0; | |
void | |
update () | |
{ | |
for (i = 0; i < N; i++) | |
{ | |
a[i] += 1; | |
b[i] += 2; | |
c[i] += 3; | |
} | |
} | |
#pragma omp declare target | |
#pragma omp declare target link(a,c,b,i) | |
#pragma omp declare target to(update) | |
#pragma omp end declare target | |
int | |
main () | |
{ | |
for (i = 0; i < N; i++) | |
{ | |
a[i] = i; | |
b[i] = i + 1; | |
c[i] = i + 2; | |
} | |
//__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]); | |
#pragma omp target map(to: i) map(tofrom: a, b, c) | |
{ | |
update(); /* Device. */ | |
} | |
//__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]); | |
for (i = 0; i < N; i++) | |
if ( a[i] != i + 1 || b[i] != i + 3 || c[i] != i + 5) | |
__builtin_abort(); | |
update(); /* Host. */ | |
//__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]); | |
for (i = 0; i < N; i++) | |
if ( a[i] != i + 2 || b[i] != i + 5 || c[i] != i + 8) | |
__builtin_abort (); | |
return 0; | |
} |