| 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; | |
| } |