4 #pragma omp declare target
5 __attribute__((noinline
))
7 foo (int x
, int y
, int z
, int *a
, int *b
)
12 for (i
= 0; i
< 64; i
++)
13 #pragma omp parallel for shared (a, b)
14 for (j
= 0; j
< 32; j
++)
20 #pragma omp distribute dist_schedule (static, 1)
21 for (i
= 0; i
< 64; i
++)
22 #pragma omp parallel for shared (a, b)
23 for (j
= 0; j
< 32; j
++)
29 #pragma omp parallel for shared (a, b)
30 for (j
= 0; j
< 32; j
++)
42 __attribute__((noinline
))
44 bar (int x
, int y
, int z
)
48 for (i
= 0; i
< 64; i
++)
55 for (i
= 0; i
< 64; i
++)
56 if (b
[i
] != i
+ 31 * 32 / 2)
61 int c
= omp_get_num_teams ();
62 int d
= omp_get_team_num ();
65 for (i
= 0; i
< 64; i
++)
68 if (b
[i
] != i
+ 31 * 32 / 2)
75 if (a
< 8 || a
> 8 + f
* 32)
82 for (i
= 0; i
< 64; i
++)
83 if (b
[i
] != i
+ (i
== y
? 31 * 32 / 2 : 0))
90 for (i
= 0; i
< 64; i
++)
91 if (b
[i
] != i
+ (i
== y
? z
: 0))
96 #pragma omp end declare target
102 #pragma omp target map(tofrom:err)
103 #pragma omp teams reduction(+:err)
104 err
+= bar (0, 0, 0);
107 #pragma omp target map(tofrom:err)
108 #pragma omp teams reduction(+:err)
109 err
+= bar (1, 0, 0);
112 #pragma omp target map(tofrom:err)
113 #pragma omp teams reduction(+:err)
114 #pragma omp distribute
115 for (i
= 0; i
< 64; i
++)
116 err
+= bar (2, i
, 0);
119 #pragma omp target map(tofrom:err)
120 #pragma omp teams reduction(+:err)
121 #pragma omp distribute
122 for (i
= 0; i
< 64; i
++)
123 #pragma omp parallel for reduction(+:err)
124 for (j
= 0; j
< 32; j
++)
125 err
+= bar (3, i
, j
);