diff options
Diffstat (limited to 'openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h')
-rw-r--r-- | openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h b/openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h index 4de2039e42e..c58bfc60358 100644 --- a/openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h +++ b/openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h @@ -101,9 +101,13 @@ INLINE int GetOmpThreadId(int threadId, bool isSPMDExecutionMode, int rc; if (isRuntimeUninitialized) { - rc = GetThreadIdInBlock(); - if (!isSPMDExecutionMode && rc >= GetMasterThreadID()) + assert(isSPMDExecutionMode && "Uninitialized runtime with non-SPMD mode."); + // For level 2 parallelism all parallel regions are executed sequentially. + if (omptarget_nvptx_simpleThreadPrivateContext + ->InL2OrHigherParallelRegion()) rc = 0; + else + rc = GetThreadIdInBlock(); } else { omptarget_nvptx_TaskDescr *currTaskDescr = omptarget_nvptx_threadPrivateContext->GetTopLevelTaskDescr(threadId); @@ -118,8 +122,13 @@ INLINE int GetNumberOfOmpThreads(int threadId, bool isSPMDExecutionMode, int rc; if (isRuntimeUninitialized) { - rc = isSPMDExecutionMode ? GetNumberOfThreadsInBlock() - : GetNumberOfThreadsInBlock() - WARPSIZE; + assert(isSPMDExecutionMode && "Uninitialized runtime with non-SPMD mode."); + // For level 2 parallelism all parallel regions are executed sequentially. + if (omptarget_nvptx_simpleThreadPrivateContext + ->InL2OrHigherParallelRegion()) + rc = 1; + else + rc = GetNumberOfThreadsInBlock(); } else { omptarget_nvptx_TaskDescr *currTaskDescr = omptarget_nvptx_threadPrivateContext->GetTopLevelTaskDescr(threadId); |