xref: /llvm-project/offload/test/offloading/malloc_parallel.c (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1 // RUN: %libomptarget-compile-run-and-check-generic
2 // RUN: %libomptarget-compileopt-run-and-check-generic
3 
4 #include <omp.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 
main()8 int main() {
9   long unsigned **DP = 0;
10   int N = 32;
11   int Threads = 64;
12   int Teams = 10;
13 
14 #pragma omp target map(from : DP)
15   DP = (long unsigned **)malloc(sizeof(long unsigned *) * Threads * Teams);
16 
17 #pragma omp target teams distribute parallel for num_teams(Teams)              \
18     thread_limit(Threads)
19   for (int i = 0; i < Threads * Teams; ++i)
20     DP[i] = (long unsigned *)malloc(sizeof(long unsigned) * N);
21 
22 #pragma omp target teams distribute parallel for num_teams(Teams)              \
23     thread_limit(Threads)
24   for (int i = 0; i < Threads * Teams; ++i) {
25     for (int j = 0; j < N; ++j) {
26       DP[i][j] = i + j;
27     }
28   }
29 
30   long unsigned s = 0;
31 #pragma omp target teams distribute parallel for num_teams(Teams)              \
32     thread_limit(Threads) reduction(+ : s)
33   for (int i = 0; i < Threads * Teams; ++i) {
34     for (int j = 0; j < N; ++j) {
35       s += DP[i][j];
36     }
37   }
38 
39   // CHECK: Sum: 6860800
40   printf("Sum: %li\n", s);
41   return 0;
42 }
43