diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2019-05-03 14:47:20 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2019-05-03 14:47:20 +0000 |
commit | 49325fc6abe74ff4a67ef19409999d128d17dca6 (patch) | |
tree | a609edaa7dcd9d697ef9be6ee217cb8efa19ee78 /libomptarget/deviceRTLs/nvptx/src/libcall.cu | |
parent | 2d4c5f915a723961181c1725daa66a299ab65e81 (diff) |
[OPENMP][NVPTX]Improved several standard OpenMP functions, NFC.
Summary:
Used parallelLevel[] counter to simplify and improve implementation of
the existing standard OpenMP functions. Functions are tested already in
several tests, the patch is NFC.
Reviewers: grokos, gtbercea, kkwli0
Subscribers: guansong, jdoerfert, caomhin, openmp-commits
Tags: #openmp
Differential Revision: https://reviews.llvm.org/D61459
git-svn-id: https://llvm.org/svn/llvm-project/openmp/trunk@359892 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'libomptarget/deviceRTLs/nvptx/src/libcall.cu')
-rw-r--r-- | libomptarget/deviceRTLs/nvptx/src/libcall.cu | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/libomptarget/deviceRTLs/nvptx/src/libcall.cu b/libomptarget/deviceRTLs/nvptx/src/libcall.cu index 452463c..681b819 100644 --- a/libomptarget/deviceRTLs/nvptx/src/libcall.cu +++ b/libomptarget/deviceRTLs/nvptx/src/libcall.cu @@ -53,17 +53,16 @@ EXTERN int omp_get_num_threads(void) { } EXTERN int omp_get_max_threads(void) { - if (isSPMDMode()) + if (parallelLevel[GetWarpId()] > 0) // We're already in parallel region. - return 1; // default is 1 thread avail + return 1; // default is 1 thread avail omptarget_nvptx_TaskDescr *currTaskDescr = getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false); - int rc = 1; // default is 1 thread avail - if (!currTaskDescr->InParallelRegion()) { - // Not currently in a parallel region, return what was set. - rc = currTaskDescr->NThreads(); - ASSERT0(LT_FUSSY, rc >= 0, "bad number of threads"); - } + ASSERT0(LT_FUSSY, !currTaskDescr->InParallelRegion(), + "Should no be in the parallel region"); + // Not currently in a parallel region, return what was set. + int rc = currTaskDescr->NThreads(); + ASSERT0(LT_FUSSY, rc >= 0, "bad number of threads"); PRINT(LD_IO, "call omp_get_max_threads() return %d\n", rc); return rc; } @@ -155,19 +154,19 @@ EXTERN int omp_get_active_level(void) { } EXTERN int omp_get_ancestor_thread_num(int level) { - if (isRuntimeUninitialized()) { - ASSERT0(LT_FUSSY, isSPMDMode(), - "Expected SPMD mode only with uninitialized runtime."); + if (isSPMDMode()) return level == 1 ? GetThreadIdInBlock() : 0; - } int rc = -1; - if (level == 0) { + // If level is 0 or all parallel regions are not active - return 0. + unsigned parLevel = parallelLevel[GetWarpId()]; + if (level == 0 || (level > 0 && parLevel < OMP_ACTIVE_PARALLEL_LEVEL && + level <= parLevel)) { rc = 0; } else if (level > 0) { int totLevel = omp_get_level(); if (level <= totLevel) { omptarget_nvptx_TaskDescr *currTaskDescr = - getMyTopTaskDescriptor(isSPMDMode()); + getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false); int steps = totLevel - level; PRINT(LD_IO, "backtrack %d steps\n", steps); ASSERT0(LT_FUSSY, currTaskDescr, @@ -207,19 +206,19 @@ EXTERN int omp_get_ancestor_thread_num(int level) { } EXTERN int omp_get_team_size(int level) { - if (isRuntimeUninitialized()) { - ASSERT0(LT_FUSSY, isSPMDMode(), - "Expected SPMD mode only with uninitialized runtime."); + if (isSPMDMode()) return level == 1 ? GetNumberOfThreadsInBlock() : 1; - } int rc = -1; - if (level == 0) { + unsigned parLevel = parallelLevel[GetWarpId()]; + // If level is 0 or all parallel regions are not active - return 1. + if (level == 0 || (level > 0 && parLevel < OMP_ACTIVE_PARALLEL_LEVEL && + level <= parLevel)) { rc = 1; } else if (level > 0) { int totLevel = omp_get_level(); if (level <= totLevel) { omptarget_nvptx_TaskDescr *currTaskDescr = - getMyTopTaskDescriptor(isSPMDMode()); + getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false); int steps = totLevel - level; ASSERT0(LT_FUSSY, currTaskDescr, "do not expect fct to be called in a non-active thread"); |