diff options
Diffstat (limited to 'libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-2.c')
-rw-r--r-- | libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-2.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-2.c new file mode 100644 index 00000000000..5298e4c54f7 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-2.c @@ -0,0 +1,61 @@ +/* { dg-do run } */ + +/* Based on asyncwait-2.f90. */ + +#include <stdlib.h> + +#define N 64 + +int *a, *b, *c; + +int +main (void) +{ + a = (int *)malloc (N * sizeof (*a)); + b = (int *)malloc (N * sizeof (*b)); + c = (int *)malloc (N * sizeof (*c)); + +#pragma acc parallel copy (a[0:N]) async (0) +#pragma acc loop + for (int i = 0; i < N; ++i) + a[i] = 1; + +#pragma acc parallel copy (b[0:N]) async (1) +#pragma acc loop + for (int i = 0; i < N; ++i) + b[i] = 1; + +#pragma acc parallel copy (a[0:N], b[0:N], c[0:N]) wait (0, 1) +#pragma acc loop + for (int i = 0; i < N; ++i) + c[i] = a[i] + b[i]; + + for (int i = 0; i < N; ++i) + if (c[i] != 2) + abort (); + +#if 1 +#pragma acc kernels copy (a[0:N]) async (0) +#pragma acc loop + for (int i = 0; i < N; ++i) + a[i] = 1; + +#pragma acc kernels copy (b[0:N]) async (1) +#pragma acc loop + for (int i = 0; i < N; ++i) + b[i] = 1; + +#pragma acc kernels copy (a[0:N], b[0:N], c[0:N]) wait (0, 1) +#pragma acc loop + for (int i = 0; i < N; ++i) + c[i] = a[i] + b[i]; + + for (int i = 0; i < N; ++i) + if (c[i] != 2) + abort (); +#endif + + free (a); + free (b); + free (c); +} |