xref: /llvm-project/offload/test/offloading/parallel_offloading_map.cpp (revision 8823448807f3b1a1362d1417e062d763734e02f5)
1330d8983SJohannes Doerfert // RUN: %libomptarget-compilexx-run-and-check-generic
2330d8983SJohannes Doerfert 
3*88234488SEthan Luis McDonough // REQUIRES: gpu
4330d8983SJohannes Doerfert 
5330d8983SJohannes Doerfert #include <cassert>
6330d8983SJohannes Doerfert #include <iostream>
7330d8983SJohannes Doerfert 
main(int argc,char * argv[])8330d8983SJohannes Doerfert int main(int argc, char *argv[]) {
9330d8983SJohannes Doerfert   constexpr const int num_threads = 64, N = 128;
10330d8983SJohannes Doerfert   int array[num_threads] = {0};
11330d8983SJohannes Doerfert 
12330d8983SJohannes Doerfert #pragma omp parallel for
13330d8983SJohannes Doerfert   for (int i = 0; i < num_threads; ++i) {
14330d8983SJohannes Doerfert     int tmp[N];
15330d8983SJohannes Doerfert 
16330d8983SJohannes Doerfert     for (int j = 0; j < N; ++j) {
17330d8983SJohannes Doerfert       tmp[j] = i;
18330d8983SJohannes Doerfert     }
19330d8983SJohannes Doerfert 
20330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for map(tofrom : tmp)
21330d8983SJohannes Doerfert     for (int j = 0; j < N; ++j) {
22330d8983SJohannes Doerfert       tmp[j] += j;
23330d8983SJohannes Doerfert     }
24330d8983SJohannes Doerfert 
25330d8983SJohannes Doerfert     for (int j = 0; j < N; ++j) {
26330d8983SJohannes Doerfert       array[i] += tmp[j];
27330d8983SJohannes Doerfert     }
28330d8983SJohannes Doerfert   }
29330d8983SJohannes Doerfert 
30330d8983SJohannes Doerfert   // Verify
31330d8983SJohannes Doerfert   for (int i = 0; i < num_threads; ++i) {
32330d8983SJohannes Doerfert     const int ref = (0 + N - 1) * N / 2 + i * N;
33330d8983SJohannes Doerfert     assert(array[i] == ref);
34330d8983SJohannes Doerfert   }
35330d8983SJohannes Doerfert 
36330d8983SJohannes Doerfert   std::cout << "PASS\n";
37330d8983SJohannes Doerfert 
38330d8983SJohannes Doerfert   return 0;
39330d8983SJohannes Doerfert }
40330d8983SJohannes Doerfert 
41330d8983SJohannes Doerfert // CHECK: PASS
42