58 lines · cpp
1// clang-format off2// RUN: %libomptarget-compilexx-generic && %libomptarget-run-generic 2>&1 | %fcheck-generic3// clang-format on4 5// UNSUPPORTED: aarch64-unknown-linux-gnu6// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO7// UNSUPPORTED: x86_64-unknown-linux-gnu8// UNSUPPORTED: x86_64-unknown-linux-gnu-LTO9// UNSUPPORTED: s390x-ibm-linux-gnu10// UNSUPPORTED: s390x-ibm-linux-gnu-LTO11 12// REQUIRES: amdgcn-amd-amdhsa13 14#include <omp.h>15#include <stdio.h>16 17#define N 10018 19bool schedule(int lb, int ub, int stride, int chunk) {20 int i;21 22 int result[N];23 for (i = 0; i < N; i++) {24 result[i] = 0;25 }26 27#pragma omp target parallel for schedule(dynamic, chunk) \28 map(tofrom : result[ : N])29 for (i = lb; i < ub; i += stride) {30 result[i] += i;31 }32 33 int value = 0;34 bool success = true;35 for (i = 0; i < N; i += stride) {36 if (value != result[i]) {37 printf("ERROR: result[%d] = %d instead of %d\n", i, result[i], value);38 success = false;39 break;40 }41 value += stride;42 }43 44 return success;45}46 47int main() {48 // CHECK: SUCCESS CHUNK SIZE 149 if (schedule(0, N, 5, 1))50 printf("SUCCESS CHUNK SIZE 1\n");51 52 // CHECK: SUCCESS CHUNK SIZE 353 if (schedule(0, N, 5, 3))54 printf("SUCCESS CHUNK SIZE 3\n");55 56 return 0;57}58