| extern |
| #ifdef __cplusplus |
| "C" |
| #endif |
| void abort (void); |
| |
| unsigned long long int k = 16; |
| #pragma omp declare target to (k) |
| |
| int |
| main () |
| { |
| unsigned char a[144], b[144], c[144]; |
| int l; |
| #pragma omp target map(from:a, b, c) |
| { |
| int i; |
| unsigned long long int j; |
| #pragma omp parallel for schedule (runtime) |
| for (i = 0; i < 16; i++) |
| a[i] = i; |
| #pragma omp parallel for schedule (monotonic: runtime) |
| for (i = 0; i < 16; i++) |
| a[i + 16] = i + 16; |
| #pragma omp parallel for schedule (nonmonotonic: runtime) |
| for (i = 0; i < 16; i++) |
| a[i + 32] = i + 32; |
| #pragma omp parallel |
| { |
| #pragma omp for schedule (runtime) |
| for (i = 0; i < 16; i++) |
| a[i + 48] = i + 48; |
| #pragma omp for schedule (monotonic: runtime) |
| for (i = 0; i < 16; i++) |
| a[i + 64] = i + 64; |
| #pragma omp for schedule (nonmonotonic: runtime) |
| for (i = 0; i < 16; i++) |
| a[i + 80] = i + 80; |
| #pragma omp for schedule (runtime) |
| for (j = 0; j < k; j++) |
| a[j + 96] = j + 96; |
| #pragma omp for schedule (monotonic: runtime) |
| for (j = 0; j < k; j++) |
| a[j + 112] = j + 112; |
| #pragma omp for schedule (nonmonotonic: runtime) |
| for (j = 0; j < k; j++) |
| a[j + 128] = j + 128; |
| } |
| #pragma omp parallel for schedule (dynamic) |
| for (i = 0; i < 16; i++) |
| b[i] = i; |
| #pragma omp parallel for schedule (monotonic: dynamic) |
| for (i = 0; i < 16; i++) |
| b[i + 16] = i + 16; |
| #pragma omp parallel for schedule (nonmonotonic: dynamic) |
| for (i = 0; i < 16; i++) |
| b[i + 32] = i + 32; |
| #pragma omp parallel |
| { |
| #pragma omp for schedule (dynamic) |
| for (i = 0; i < 16; i++) |
| b[i + 48] = i + 48; |
| #pragma omp for schedule (monotonic: dynamic) |
| for (i = 0; i < 16; i++) |
| b[i + 64] = i + 64; |
| #pragma omp for schedule (nonmonotonic: dynamic) |
| for (i = 0; i < 16; i++) |
| b[i + 80] = i + 80; |
| #pragma omp for schedule (dynamic) |
| for (j = 0; j < k; j++) |
| b[j + 96] = j + 96; |
| #pragma omp for schedule (monotonic: dynamic) |
| for (j = 0; j < k; j++) |
| b[j + 112] = j + 112; |
| #pragma omp for schedule (nonmonotonic: dynamic) |
| for (j = 0; j < k; j++) |
| b[j + 128] = j + 128; |
| } |
| #pragma omp parallel for schedule (guided) |
| for (i = 0; i < 16; i++) |
| c[i] = i; |
| #pragma omp parallel for schedule (monotonic: guided) |
| for (i = 0; i < 16; i++) |
| c[i + 16] = i + 16; |
| #pragma omp parallel for schedule (nonmonotonic: guided) |
| for (i = 0; i < 16; i++) |
| c[i + 32] = i + 32; |
| #pragma omp parallel |
| { |
| #pragma omp for schedule (guided) |
| for (i = 0; i < 16; i++) |
| c[i + 48] = i + 48; |
| #pragma omp for schedule (monotonic: guided) |
| for (i = 0; i < 16; i++) |
| c[i + 64] = i + 64; |
| #pragma omp for schedule (nonmonotonic: guided) |
| for (i = 0; i < 16; i++) |
| c[i + 80] = i + 80; |
| #pragma omp for schedule (guided) |
| for (j = 0; j < k; j++) |
| c[j + 96] = j + 96; |
| #pragma omp for schedule (monotonic: guided) |
| for (j = 0; j < k; j++) |
| c[j + 112] = j + 112; |
| #pragma omp for schedule (nonmonotonic: guided) |
| for (j = 0; j < k; j++) |
| c[j + 128] = j + 128; |
| } |
| } |
| for (l = 0; l < 144; ++l) |
| if (a[l] != l || b[l] != l || c[l] != l) |
| abort (); |
| return 0; |
| } |