#include /* Test of gang-private aggregate variable declared on loop directive, with broadcasting to partitioned workers. */ typedef struct { int x, y, z; int attr[13]; } vec3; int main (int argc, char* argv[]) { int i, arr[32 * 32]; vec3 pt; for (i = 0; i < 32 * 32; i++) arr[i] = i; #pragma acc kernels copy(arr) { #pragma acc loop gang private(pt) for (i = 0; i < 32; i++) { pt.x = i; pt.y = i * 2; pt.z = i * 4; pt.attr[5] = i * 6; #pragma acc loop worker for (int j = 0; j < 32; j++) arr[i * 32 + j] += pt.x + pt.y + pt.z + pt.attr[5]; } } for (i = 0; i < 32 * 32; i++) assert (arr[i] == i + (i / 32) * 13); return 0; }