12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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;
- }
|