diff options
author | Hans Wennborg <hans@hanshq.net> | 2019-03-18 12:53:32 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2019-03-18 12:53:32 +0000 |
commit | abdd46b7db373cb68b58d543400ceb178347b056 (patch) | |
tree | 04720549cebf68f6bd10f0009d01c340d7a65c9f /final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c | |
parent | 001d07557b8ffbecdb4f51536c1115f9bcba5ef1 (diff) |
Creating release candidate final from release_800 branchsvn-tags/RELEASE_800
git-svn-id: https://llvm.org/svn/llvm-project/openmp/tags/RELEASE_800@356365 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c')
-rw-r--r-- | final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c b/final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c new file mode 100644 index 0000000..dd17ae7 --- /dev/null +++ b/final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c @@ -0,0 +1,55 @@ +// RUN: %compile-run-and-check + +#include <omp.h> +#include <stdio.h> + +#pragma omp declare target +static void putValueInParallel(int *ptr, int value) { + #pragma omp parallel + { + *ptr = value; + } +} + +static int getId() { + int id; + putValueInParallel(&id, omp_get_thread_num()); + return id; +} +#pragma omp end declare target + +const int MaxThreads = 1024; +const int Threads = 64; + +int main(int argc, char *argv[]) { + int master; + int check[MaxThreads]; + for (int i = 0; i < MaxThreads; i++) { + check[i] = 0; + } + + #pragma omp target map(master, check[:]) + { + master = getId(); + + #pragma omp parallel num_threads(Threads) + { + check[omp_get_thread_num()] = getId(); + } + } + + // CHECK: master = 0. + printf("master = %d.\n", master); + // CHECK-NOT: invalid + for (int i = 0; i < MaxThreads; i++) { + if (i < Threads) { + if (check[i] != i) { + printf("invalid: check[%d] should be %d, is %d\n", i, i, check[i]); + } + } else if (check[i] != 0) { + printf("invalid: check[%d] should be 0, is %d\n", i, check[i]); + } + } + + return 0; +} |