Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.oacc-c++/deep-copy-12.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
#include <stdlib.h> /* Test attach/detach with dereferences of reference to pointer to struct. */ typedef struct { int *a; int *b; int *c; } mystruct; int main(int argc, char* argv[]) { const int N = 1024; mystruct *m = (mystruct *) malloc (sizeof (*m)); mystruct *&mref = m; int i; mref->a = (int *) malloc (N * sizeof (int)); m->b = (int *) malloc (N * sizeof (int)); m->c = (int *) malloc (N * sizeof (int)); for (i = 0; i < N; i++) { mref->a[i] = 0; m->b[i] = 0; m->c[i] = 0; } #pragma acc enter data copyin(m[0:1]) for (int i = 0; i < 99; i++) { int j; #pragma acc parallel loop copy(mref->a[0:N]) for (j = 0; j < N; j++) mref->a[j]++; #pragma acc parallel loop copy(mref->b[0:N], m->c[5:N-10]) for (j = 0; j < N; j++) { mref->b[j]++; if (j > 5 && j < N - 5) m->c[j]++; } } #pragma acc exit data copyout(m[0:1]) for (i = 0; i < N; i++) { if (m->a[i] != 99) abort (); if (m->b[i] != 99) abort (); if (i > 5 && i < N-5) { if (m->c[i] != 99) abort (); } else { if (m->c[i] != 0) abort (); } } free (m->a); free (m->b); free (m->c); free (m); return 0; }