/* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */ #include #include #include #define N 128 int main () { int *ptrarr[N]; int otherarr[N]; int sum = 0, hostsum = 0; for (int i = 0; i < N; i++) { otherarr[i] = i * 2 + 1; ptrarr[i] = &otherarr[N - 1 - i]; hostsum += otherarr[i]; } acc_copyin (otherarr, sizeof otherarr); acc_copyin (ptrarr, sizeof ptrarr); for (int i = 0; i < N; i++) { #pragma acc enter data attach(ptrarr[i]) } #pragma acc parallel loop copyin(ptrarr[0:N], otherarr[0:N]) \ reduction(+:sum) for (int i = 0; i < N; i++) sum += *ptrarr[i]; for (int i = 0; i < N; i++) { #pragma acc exit data detach(ptrarr[i]) } assert (sum == hostsum); acc_delete (ptrarr, sizeof ptrarr); acc_delete (otherarr, sizeof otherarr); return 0; }