1 // RUN: %libomptarget-compilexx-run-and-check-generic 2 3 #include <cassert> 4 #include <iostream> 5 6 int main(int argc, char *argv[]) { 7 constexpr const int num_threads = 64, N = 128; 8 int array[num_threads] = {0}; 9 10 #pragma omp parallel for 11 for (int i = 0; i < num_threads; ++i) { 12 int tmp[N]; 13 14 for (int j = 0; j < N; ++j) { 15 tmp[j] = i; 16 } 17 18 #pragma omp target teams distribute parallel for map(tofrom : tmp) 19 for (int j = 0; j < N; ++j) { 20 tmp[j] += j; 21 } 22 23 for (int j = 0; j < N; ++j) { 24 array[i] += tmp[j]; 25 } 26 } 27 28 // Verify 29 for (int i = 0; i < num_threads; ++i) { 30 const int ref = (0 + N - 1) * N / 2 + i * N; 31 assert(array[i] == ref); 32 } 33 34 std::cout << "PASS\n"; 35 36 return 0; 37 } 38 39 // CHECK: PASS 40