3 /* Test of worker-private variables declared on loop directive, broadcasting
4 to vector-partitioned mode. Array worker variable. */
7 main (int argc
, char* argv
[])
9 int i
, arr
[32 * 32 * 32];
12 for (i
= 0; i
< 32 * 32 * 32; i
++)
15 /* "pt" is treated as "present_or_copy" on the kernels directive because it
16 is an array variable. */
17 #pragma acc kernels copy(arr)
21 #pragma acc loop gang(num:32)
22 for (i
= 0; i
< 32; i
++)
24 /* But here, it is made private per-worker. */
25 #pragma acc loop worker(num:32) private(pt)
26 for (j
= 0; j
< 32; j
++)
32 #pragma acc loop vector(length:32)
33 for (k
= 0; k
< 32; k
++)
34 arr
[i
* 1024 + j
* 32 + k
] += pt
[0] * k
;
38 #pragma acc loop vector(length:32)
39 for (k
= 0; k
< 32; k
++)
40 arr
[i
* 1024 + j
* 32 + k
] += pt
[1] * k
;
45 for (i
= 0; i
< 32; i
++)
46 for (int j
= 0; j
< 32; j
++)
47 for (int k
= 0; k
< 32; k
++)
49 int idx
= i
* 1024 + j
* 32 + k
;
50 assert (arr
[idx
] == idx
+ (i
^ j
* 3) * k
+ (i
| j
* 5) * k
);