123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- void
- foo (int x, int *y, int n, int v)
- {
- int z[3] = { 45, 46, 47 };
- int u[n], w[n], i;
- for (i = 0; i < n; i++)
- w[i] = u[i] = n + i;
- #pragma omp taskgroup task_reduction (+: x, y[:2], z[1:2], u, w[1:v])
- {
- #pragma omp task in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
- {
- x++;
- y[0] += 2;
- y[1] += 3;
- z[1] += 4;
- u[0] += 5;
- w[1] += 6;
- }
- #pragma omp target in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
- {
- x += 4;
- y[0] += 5;
- y[1] += 6;
- z[2] += 7;
- u[1] += 8;
- w[2] += 7;
- }
- #pragma omp target in_reduction (+: x, y[:v], z[1:v], u, w[1:2])
- {
- x += 9;
- y[0] += 10;
- y[1] += 11;
- z[1] += 12;
- u[2] += 13;
- w[1] += 14;
- }
- }
- if (x != 56 || y[0] != 60 || y[1] != 64)
- __builtin_abort ();
- if (z[0] != 45 || z[1] != 62 || z[2] != 54)
- __builtin_abort ();
- if (u[0] != 8 || u[1] != 12 || u[2] != 18)
- __builtin_abort ();
- if (w[0] != 3 || w[1] != 24 || w[2] != 12)
- __builtin_abort ();
- }
- void
- bar (int x, int *y, int n, int v)
- {
- int z[3] = { 45, 46, 47 };
- int u[n], w[n], i;
- for (i = 0; i < n; i++)
- w[i] = u[i] = n + i;
- #pragma omp parallel master
- #pragma omp taskgroup task_reduction (+: x, y[:2], z[1:2], u, w[1:v])
- {
- #pragma omp task in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
- {
- x++;
- y[0] += 2;
- y[1] += 3;
- z[1] += 4;
- u[0] += 5;
- w[1] += 6;
- }
- #pragma omp target in_reduction (+: x, y[:2], z[1:2], u, w[1:v])
- {
- x += 4;
- y[0] += 5;
- y[1] += 6;
- z[2] += 7;
- u[1] += 8;
- w[2] += 7;
- }
- #pragma omp target in_reduction (+: x, y[:v], z[1:v], u, w[1:2])
- {
- x += 9;
- y[0] += 10;
- y[1] += 11;
- z[1] += 12;
- u[2] += 13;
- w[1] += 14;
- }
- }
- if (x != 56 || y[0] != 77 || y[1] != 84)
- __builtin_abort ();
- if (z[0] != 45 || z[1] != 62 || z[2] != 54)
- __builtin_abort ();
- if (u[0] != 8 || u[1] != 12 || u[2] != 18)
- __builtin_abort ();
- if (w[0] != 3 || w[1] != 24 || w[2] != 12)
- __builtin_abort ();
- }
- int
- main ()
- {
- int y[2] = { 43, 44 };
- #pragma omp parallel master
- foo (42, y, 3, 2);
- bar (42, y, 3, 2);
- return 0;
- }
|