| extern |
| #ifdef __cplusplus |
| "C" |
| #endif |
| void abort (void); |
| int v[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; |
| |
| int |
| main () |
| { |
| #pragma omp parallel num_threads (4) |
| #pragma omp single |
| { |
| int i; |
| #pragma omp taskgroup |
| { |
| for (i = 0; i < 16; i += 2) |
| #pragma omp task |
| { |
| #pragma omp task |
| v[i]++; |
| #pragma omp task |
| v[i + 1]++; |
| } |
| } |
| for (i = 0; i < 16; i++) |
| if (v[i] != i + 2) |
| abort (); |
| #pragma omp taskgroup |
| { |
| for (i = 0; i < 16; i += 2) |
| #pragma omp task |
| { |
| #pragma omp task |
| v[i]++; |
| #pragma omp task |
| v[i + 1]++; |
| #pragma omp taskwait |
| } |
| } |
| for (i = 0; i < 16; i++) |
| if (v[i] != i + 3) |
| abort (); |
| #pragma omp taskgroup |
| { |
| for (i = 0; i < 16; i += 2) |
| #pragma omp task |
| { |
| #pragma omp task |
| v[i]++; |
| v[i + 1]++; |
| } |
| #pragma omp taskwait |
| for (i = 0; i < 16; i += 2) |
| #pragma omp task |
| v[i + 1]++; |
| } |
| for (i = 0; i < 16; i++) |
| if (v[i] != i + 4 + (i & 1)) |
| abort (); |
| #pragma omp taskgroup |
| { |
| for (i = 0; i < 16; i += 2) |
| { |
| #pragma omp taskgroup |
| { |
| #pragma omp task |
| v[i]++; |
| #pragma omp task |
| v[i + 1]++; |
| } |
| if (v[i] != i + 5 || v[i + 1] != i + 7) |
| abort (); |
| #pragma omp task |
| v[i]++; |
| } |
| } |
| for (i = 0; i < 16; i++) |
| if (v[i] != i + 6) |
| abort (); |
| } |
| return 0; |
| } |