// Defaults, if not "#include"d from ../libgomp.oacc-c++/routine-1-*.C. #ifndef TEMPLATE # define TEMPLATE # define TYPE int # define RETURN_1 TYPE # define RETURN_2 #endif #include #pragma acc routine TEMPLATE RETURN_1 fact(TYPE n) RETURN_2 { if (n == 0 || n == 1) return 1; else return n * fact (n - 1); } int main() { int *s, *g, *w, *v, *gw, *gv, *wv, *gwv, i, n = 10; s = (int *) malloc (sizeof (int) * n); g = (int *) malloc (sizeof (int) * n); w = (int *) malloc (sizeof (int) * n); v = (int *) malloc (sizeof (int) * n); gw = (int *) malloc (sizeof (int) * n); gv = (int *) malloc (sizeof (int) * n); wv = (int *) malloc (sizeof (int) * n); gwv = (int *) malloc (sizeof (int) * n); #pragma acc parallel loop async copyout(s[0:n]) seq for (i = 0; i < n; i++) s[i] = fact (i); #pragma acc parallel loop async copyout(g[0:n]) gang for (i = 0; i < n; i++) g[i] = fact (i); #pragma acc parallel loop async copyout(w[0:n]) worker for (i = 0; i < n; i++) w[i] = fact (i); #pragma acc parallel loop async copyout(v[0:n]) vector for (i = 0; i < n; i++) v[i] = fact (i); #pragma acc parallel loop async copyout(gw[0:n]) gang worker for (i = 0; i < n; i++) gw[i] = fact (i); #pragma acc parallel loop async copyout(gv[0:n]) gang vector for (i = 0; i < n; i++) gv[i] = fact (i); #pragma acc parallel loop async copyout(wv[0:n]) worker vector for (i = 0; i < n; i++) wv[i] = fact (i); #pragma acc parallel loop async copyout(gwv[0:n]) gang worker vector for (i = 0; i < n; i++) gwv[i] = fact (i); #pragma acc wait for (i = 0; i < n; i++) if (s[i] != fact (i)) abort (); for (i = 0; i < n; i++) if (g[i] != s[i]) abort (); for (i = 0; i < n; i++) if (w[i] != s[i]) abort (); for (i = 0; i < n; i++) if (v[i] != s[i]) abort (); for (i = 0; i < n; i++) if (gw[i] != s[i]) abort (); for (i = 0; i < n; i++) if (gv[i] != s[i]) abort (); for (i = 0; i < n; i++) if (wv[i] != s[i]) abort (); for (i = 0; i < n; i++) if (gwv[i] != s[i]) abort (); return 0; }