void bar (int *); void foo (int *a, int f) { int i, j, k, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0; #pragma omp parallel masked default(none) private (k) filter (f) firstprivate (f) bar (&k); #pragma omp parallel masked default(none) private (k) bar (&k); #pragma omp parallel default(none) firstprivate(a, f) shared(x, y, z) { #pragma omp masked taskloop reduction (+:x) default(none) firstprivate(a) filter (f) for (i = 0; i < 64; i++) x += a[i]; #pragma omp masked taskloop simd reduction (+:y) default(none) firstprivate(a) private (i) filter (f) for (i = 0; i < 64; i++) y += a[i]; #pragma omp masked taskloop simd reduction (+:y) default(none) firstprivate(a) private (i) for (i = 0; i < 64; i++) y += a[i]; #pragma omp masked taskloop simd collapse(2) reduction (+:z) default(none) firstprivate(a) private (i, j) filter (f) for (j = 0; j < 1; j++) for (i = 0; i < 64; ++i) z += a[i]; } #pragma omp parallel masked taskloop reduction (+:u) default(none) firstprivate(a, f) filter (f) for (i = 0; i < 64; i++) u += a[i]; #pragma omp parallel masked taskloop simd reduction (+:v) default(none) firstprivate(a, f) filter (f) for (i = 0; i < 64; i++) v += a[i]; #pragma omp parallel masked taskloop simd collapse(2) reduction (+:w) default(none) firstprivate(a, f) filter (f) for (j = 0; j < 1; j++) for (i = 0; i < 64; ++i) w += a[i]; }