1 /* Test 'acc enter/exit data' regions. */
4 /* { dg-xfail-run-if "TODO" { openacc_nvidia_accel_selected } } */
9 main (int argc
, char **argv
)
11 int N
= 128; //1024 * 1024;
12 float *a
, *b
, *c
, *d
, *e
;
16 nbytes
= N
* sizeof (float);
18 a
= (float *) malloc (nbytes
);
19 b
= (float *) malloc (nbytes
);
20 c
= (float *) malloc (nbytes
);
21 d
= (float *) malloc (nbytes
);
22 e
= (float *) malloc (nbytes
);
24 for (i
= 0; i
< N
; i
++)
30 #pragma acc enter data copyin (a[0:N]) copyin (b[0:N]) copyin (N) async
31 #pragma acc parallel present (a[0:N], b[0:N]) async wait
33 for (i
= 0; i
< N
; i
++)
36 #pragma acc exit data copyout (a[0:N]) copyout (b[0:N]) wait async
39 for (i
= 0; i
< N
; i
++)
48 for (i
= 0; i
< N
; i
++)
54 #pragma acc enter data copyin (a[0:N]) async
55 #pragma acc enter data copyin (b[0:N]) async wait
56 #pragma acc enter data copyin (N) async wait
57 #pragma acc parallel async wait
59 for (i
= 0; i
< N
; i
++)
62 #pragma acc exit data copyout (a[0:N]) copyout (b[0:N]) delete (N) wait async
65 for (i
= 0; i
< N
; i
++)
74 for (i
= 0; i
< N
; i
++)
80 #pragma acc enter data copyin (a[0:N]) copyin (b[0:N]) copyin (N) async (1)
81 #pragma acc parallel present (a[0:N], b[0:N]) async (1)
83 for (i
= 0; i
< N
; i
++)
86 #pragma acc exit data copyout (a[0:N]) copyout (b[0:N]) wait (1) async (1)
89 for (i
= 0; i
< N
; i
++)
98 for (i
= 0; i
< N
; i
++)
106 #pragma acc enter data copyin (a[0:N]) copyin (b[0:N]) copyin (c[0:N]) copyin (d[0:N]) copyin (N) async (1)
108 #pragma acc parallel present (a[0:N], b[0:N]) async (1) wait (1)
110 for (i
= 0; i
< N
; i
++)
111 b
[i
] = (a
[i
] * a
[i
] * a
[i
]) / a
[i
];
113 #pragma acc parallel present (a[0:N], c[0:N]) async (2) wait (1)
115 for (i
= 0; i
< N
; i
++)
116 c
[i
] = (a
[i
] + a
[i
] + a
[i
] + a
[i
]) / a
[i
];
118 #pragma acc parallel present (a[0:N], d[0:N]) async (3) wait (1)
120 for (i
= 0; i
< N
; i
++)
121 d
[i
] = ((a
[i
] * a
[i
] + a
[i
]) / a
[i
]) - a
[i
];
123 #pragma acc exit data copyout (a[0:N]) copyout (b[0:N]) copyout (c[0:N]) copyout (d[0:N]) wait (1, 2, 3) async (1)
126 for (i
= 0; i
< N
; i
++)
141 for (i
= 0; i
< N
; i
++)
150 #pragma acc enter data copyin (a[0:N]) copyin (b[0:N]) copyin (c[0:N]) copyin (d[0:N]) copyin (e[0:N]) copyin (N) async (1)
152 #pragma acc parallel present (a[0:N], b[0:N]) async (1) wait (1)
153 for (int ii
= 0; ii
< N
; ii
++)
154 b
[ii
] = (a
[ii
] * a
[ii
] * a
[ii
]) / a
[ii
];
156 #pragma acc parallel present (a[0:N], c[0:N]) async (2) wait (1)
157 for (int ii
= 0; ii
< N
; ii
++)
158 c
[ii
] = (a
[ii
] + a
[ii
] + a
[ii
] + a
[ii
]) / a
[ii
];
160 #pragma acc parallel present (a[0:N], d[0:N]) async (3) wait (1)
161 for (int ii
= 0; ii
< N
; ii
++)
162 d
[ii
] = ((a
[ii
] * a
[ii
] + a
[ii
]) / a
[ii
]) - a
[ii
];
164 #pragma acc parallel present (a[0:N], b[0:N], c[0:N], d[0:N], e[0:N]) \
166 for (int ii
= 0; ii
< N
; ii
++)
167 e
[ii
] = a
[ii
] + b
[ii
] + c
[ii
] + d
[ii
];
169 #pragma acc exit data copyout (a[0:N]) copyout (b[0:N]) copyout (c[0:N]) \
170 copyout (d[0:N]) copyout (e[0:N]) wait (1, 2, 3, 4) async (1)
173 for (i
= 0; i
< N
; i
++)