Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.c-c++-common/task-reduction-4.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
extern #ifdef __cplusplus "C" #endif void abort (void); void bar (long long int *p) { p[0] *= 2; #pragma omp task in_reduction (*: p[0]) p[0] *= 3; } void foo (long long int *p, long long int *q) { #pragma omp taskgroup task_reduction (*: p[0]) { #pragma omp task in_reduction (*: p[0]) bar (p); #pragma omp task in_reduction (*: p[0]) bar (p); bar (p); #pragma omp taskgroup task_reduction (*: q[0]) { #pragma omp task in_reduction (*: q[0]) bar (q); #pragma omp task in_reduction (*: q[0]) bar (q); #pragma omp task in_reduction (*: q[0]) bar (q); bar (q); #pragma omp task in_reduction (*: p[0]) { #pragma omp taskgroup task_reduction (*: p[0]) { #pragma omp task in_reduction (*: p[0]) bar (p); p[0] *= 2; #pragma omp task in_reduction (*: p[0]) bar (p); } } } } } int main () { long long int p = 1LL, q = 1LL; foo (&p, &q); if (p != 6LL * 6LL * 6LL * 6LL * 6LL * 2LL || q != 6LL * 6LL * 6LL * 6LL) abort (); p = 1LL; q = 1LL; #pragma omp taskgroup foo (&p, &q); if (p != 6LL * 6LL * 6LL * 6LL * 6LL * 2LL || q != 6LL * 6LL * 6LL * 6LL) abort (); p = 1LL; q = 1LL; #pragma omp parallel #pragma omp single foo (&p, &q); if (p != 6LL * 6LL * 6LL * 6LL * 6LL * 2LL || q != 6LL * 6LL * 6LL * 6LL) abort (); return 0; }