diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2018-11-27 21:06:09 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2018-11-27 21:06:09 +0000 |
commit | d43679ead0d93549ce184a8f34765d8b9c2f246c (patch) | |
tree | d5182da2ed39f40d76573a95236b58f8bef656e2 /openmp/libomptarget | |
parent | 666210e6bc391d53813f19a561b42fb4398e1585 (diff) |
[OPENMP][NVPTX]Basic support for reductions across the teams.
Summary:
Added functions __kmpc_nvptx_teams_reduce_nowait_simple and
__kmpc_nvptx_teams_end_reduce_nowait_simple to implement basic support
for reductions across the teams.
Reviewers: gtbercea, kkwli0
Subscribers: guansong, jfb, caomhin, openmp-commits
Differential Revision: https://reviews.llvm.org/D54967
Diffstat (limited to 'openmp/libomptarget')
-rw-r--r-- | openmp/libomptarget/deviceRTLs/nvptx/src/interface.h | 6 | ||||
-rw-r--r-- | openmp/libomptarget/deviceRTLs/nvptx/src/reduction.cu | 18 |
2 files changed, 24 insertions, 0 deletions
diff --git a/openmp/libomptarget/deviceRTLs/nvptx/src/interface.h b/openmp/libomptarget/deviceRTLs/nvptx/src/interface.h index 4414ea43b99..40321a624cd 100644 --- a/openmp/libomptarget/deviceRTLs/nvptx/src/interface.h +++ b/openmp/libomptarget/deviceRTLs/nvptx/src/interface.h @@ -419,6 +419,12 @@ EXTERN int32_t __kmpc_nvptx_teams_reduce_nowait_simple_generic( int32_t global_tid, int32_t num_vars, size_t reduce_size, void *reduce_data, kmp_ShuffleReductFctPtr shflFct, kmp_InterWarpCopyFctPtr cpyFct, kmp_CopyToScratchpadFctPtr sratchFct, kmp_LoadReduceFctPtr ldFct); +EXTERN int32_t __kmpc_nvptx_teams_reduce_nowait_simple(kmp_Ident *loc, + int32_t global_tid, + kmp_CriticalName *crit); +EXTERN void __kmpc_nvptx_teams_end_reduce_nowait_simple(kmp_Ident *loc, + int32_t global_tid, + kmp_CriticalName *crit); EXTERN int32_t __kmpc_shuffle_int32(int32_t val, int16_t delta, int16_t size); EXTERN int64_t __kmpc_shuffle_int64(int64_t val, int16_t delta, int16_t size); diff --git a/openmp/libomptarget/deviceRTLs/nvptx/src/reduction.cu b/openmp/libomptarget/deviceRTLs/nvptx/src/reduction.cu index 2a2edcef03d..aaa95c77cb5 100644 --- a/openmp/libomptarget/deviceRTLs/nvptx/src/reduction.cu +++ b/openmp/libomptarget/deviceRTLs/nvptx/src/reduction.cu @@ -430,3 +430,21 @@ int32_t __kmpc_nvptx_teams_reduce_nowait_simple_generic( /*isSPMDExecutionMode=*/false, /*isRuntimeUninitialized=*/true); } + +EXTERN int32_t __kmpc_nvptx_teams_reduce_nowait_simple(kmp_Ident *loc, + int32_t global_tid, + kmp_CriticalName *crit) { + if (checkSPMDMode(loc) && GetThreadIdInBlock() != 0) + return 0; + // The master thread of the team actually does the reduction. + while (atomicCAS((uint32_t *)crit, 0, 1)) + ; + return 1; +} + +EXTERN void +__kmpc_nvptx_teams_end_reduce_nowait_simple(kmp_Ident *loc, int32_t global_tid, + kmp_CriticalName *crit) { + (void)atomicExch((uint32_t *)crit, 0); +} + |