Viewing file: target-link-1.c (1.14 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
struct S { int s, t; };
int a = 1, b = 1; double c[27]; struct S d = { 8888, 8888 }; #pragma omp declare target link (a) to (b) link (c, d)
int foo (void) { return a++ + b++; }
int bar (int n) { int *p1 = &a; int *p2 = &b; c[n] += 2.0; d.s -= 2; d.t -= 2; return *p1 + *p2 + d.s + d.t; }
#pragma omp declare target (foo, bar)
int main () { a = b = 2; d.s = 17; d.t = 18;
int res, n = 10; #pragma omp target map (to: a, b, c, d) map (from: res) { res = foo () + foo (); c[n] = 3.0; res += bar (n); }
int shared_mem = 0; #pragma omp target map (alloc: shared_mem) shared_mem = 1;
if ((shared_mem && res != (2 + 2) + (3 + 3) + (4 + 4 + 15 + 16)) || (!shared_mem && res != (2 + 1) + (3 + 2) + (4 + 3 + 15 + 16))) __builtin_abort ();
#pragma omp target enter data map (to: c) #pragma omp target update from (c) res = (int) (c[n] + 0.5); if ((shared_mem && res != 5) || (!shared_mem && res != 0)) __builtin_abort ();
#pragma omp target map (to: a, b) map (from: res) res = foo ();
if ((shared_mem && res != 4 + 4) || (!shared_mem && res != 2 + 3)) __builtin_abort ();
return 0; }
|