1  void bar (int *);
       2  
       3  void
       4  foo (int *a)
       5  {
       6    int i, j, k, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0;
       7    #pragma omp parallel master default(none) private (k)
       8    bar (&k);
       9    #pragma omp parallel default(none) firstprivate(a) shared(x, y, z)
      10    {
      11      #pragma omp master taskloop reduction (+:x) default(none) firstprivate(a)
      12      for (i = 0; i < 64; i++)
      13        x += a[i];
      14      #pragma omp master taskloop simd reduction (+:y) default(none) firstprivate(a) private (i)
      15      for (i = 0; i < 64; i++)
      16        y += a[i];
      17      #pragma omp master taskloop simd collapse(2) reduction (+:z) default(none) firstprivate(a) private (i, j)
      18      for (j = 0; j < 1; j++)
      19        for (i = 0; i < 64; ++i)
      20  	z += a[i];
      21    }
      22    #pragma omp parallel master taskloop reduction (+:u) default(none) firstprivate(a)
      23    for (i = 0; i < 64; i++)
      24      u += a[i];
      25    #pragma omp parallel master taskloop simd reduction (+:v) default(none) firstprivate(a)
      26    for (i = 0; i < 64; i++)
      27      v += a[i];
      28    #pragma omp parallel master taskloop simd collapse(2) reduction (+:w) default(none) firstprivate(a)
      29    for (j = 0; j < 1; j++)
      30      for (i = 0; i < 64; ++i)
      31        w += a[i];
      32  }