summaryrefslogtreecommitdiffstats
path: root/openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h
diff options
context:
space:
mode:
Diffstat (limited to 'openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h')
-rw-r--r--openmp/libomptarget/deviceRTLs/nvptx/src/supporti.h17
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);
OpenPOWER on IntegriCloud