1 struct S { int a, b, c[2]; };
2 #pragma omp declare reduction (+: S : (omp_out.a += omp_in.a, omp_out.b += omp_in.b)) \
3 initializer (omp_priv = { 0, 0, { 0, 0 } })
6 foo (S &x, S *&y, int n, int v)
8 S zu[3] = { { 45, 47, {} }, { 46, 48, {} }, { 47, 49, {} } };
14 for (i = 0; i < n; i++)
16 w[i].a = u[i].a = n + i;
17 w[i].b = u[i].b = n - i;
18 w[i].c[0] = u[i].c[0] = 0;
19 w[i].c[1] = u[i].c[1] = 0;
21 #pragma omp taskgroup task_reduction (+: x, y[:2], z[1:2], u, w[1:v])
23 #pragma omp task in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
38 #pragma omp target in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
53 #pragma omp target in_reduction (+: x, y[:v], z[1:v], u, w[1:2])
69 if (x.a != 56 || y[0].a != 60 || y[1].a != 64)
71 if (x.b != 86 || y[0].b != 100 || y[1].b != 104)
73 if (z[0].a != 45 || z[1].a != 62 || z[2].a != 54)
75 if (z[0].b != 47 || z[1].b != 84 || z[2].b != 66)
77 if (u[0].a != 8 || u[1].a != 12 || u[2].a != 18)
79 if (u[0].b != 18 || u[1].b != 20 || u[2].b != 24)
81 if (w[0].a != 3 || w[1].a != 24 || w[2].a != 12)
83 if (w[0].b != 3 || w[1].b != 42 || w[2].b != 18)
88 bar (S &x, S *&y, int n, int v)
90 S zu[3] = { { 45, 47, {} }, { 46, 48, {} }, { 47, 49, {} } };
96 for (i = 0; i < n; i++)
98 w[i].a = u[i].a = n + i;
99 w[i].b = u[i].b = n - i;
100 w[i].c[0] = u[i].c[0] = 0;
101 w[i].c[1] = u[i].c[1] = 0;
103 #pragma omp parallel master
104 #pragma omp taskgroup task_reduction (+: x, y[:2], z[1:2], u, w[1:v])
106 #pragma omp task in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
121 #pragma omp target in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
136 #pragma omp target in_reduction (+: x, y[:v], z[1:v], u, w[1:2])
152 if (x.a != 56 || y[0].a != 77 || y[1].a != 84)
154 if (x.b != 86 || y[0].b != 147 || y[1].b != 154)
156 if (z[0].a != 45 || z[1].a != 62 || z[2].a != 54)
158 if (z[0].b != 47 || z[1].b != 84 || z[2].b != 66)
160 if (u[0].a != 8 || u[1].a != 12 || u[2].a != 18)
162 if (u[0].b != 18 || u[1].b != 20 || u[2].b != 24)
164 if (w[0].a != 3 || w[1].a != 24 || w[2].a != 12)
166 if (w[0].b != 3 || w[1].b != 42 || w[2].b != 18)
174 S yu[2] = { { 43, 53 }, { 44, 54 } };
176 #pragma omp parallel master