aboutsummaryrefslogtreecommitdiff
path: root/offload/test/libc/malloc_parallel.c
diff options
context:
space:
mode:
Diffstat (limited to 'offload/test/libc/malloc_parallel.c')
-rw-r--r--offload/test/libc/malloc_parallel.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/offload/test/libc/malloc_parallel.c b/offload/test/libc/malloc_parallel.c
new file mode 100644
index 0000000..076a7ba
--- /dev/null
+++ b/offload/test/libc/malloc_parallel.c
@@ -0,0 +1,42 @@
+// RUN: %libomptarget-compile-run-and-check-generic
+// RUN: %libomptarget-compileopt-run-and-check-generic
+
+#include <omp.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+ long unsigned **DP = 0;
+ int N = 32;
+ int Threads = 64;
+ int Teams = 10;
+
+#pragma omp target map(from : DP)
+ DP = (long unsigned **)malloc(sizeof(long unsigned *) * Threads * Teams);
+
+#pragma omp target teams distribute parallel for num_teams(Teams) \
+ thread_limit(Threads)
+ for (int i = 0; i < Threads * Teams; ++i)
+ DP[i] = (long unsigned *)malloc(sizeof(long unsigned) * N);
+
+#pragma omp target teams distribute parallel for num_teams(Teams) \
+ thread_limit(Threads)
+ for (int i = 0; i < Threads * Teams; ++i) {
+ for (int j = 0; j < N; ++j) {
+ DP[i][j] = i + j;
+ }
+ }
+
+ long unsigned s = 0;
+#pragma omp target teams distribute parallel for num_teams(Teams) \
+ thread_limit(Threads) reduction(+ : s)
+ for (int i = 0; i < Threads * Teams; ++i) {
+ for (int j = 0; j < N; ++j) {
+ s += DP[i][j];
+ }
+ }
+
+ // CHECK: Sum: 6860800
+ printf("Sum: %li\n", s);
+ return 0;
+}