diff --git a/openmp/libomptarget/DeviceRTL/src/Workshare.cpp b/openmp/libomptarget/DeviceRTL/src/Workshare.cpp --- a/openmp/libomptarget/DeviceRTL/src/Workshare.cpp +++ b/openmp/libomptarget/DeviceRTL/src/Workshare.cpp @@ -592,7 +592,49 @@ mapping::isSPMDMode()); } +void __kmpc_distribute_static_init_4(IdentTy *loc, int32_t global_tid, + int32_t schedtype, int32_t *plastiter, + int32_t *plower, int32_t *pupper, + int32_t *pstride, int32_t incr, + int32_t chunk) { + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + mapping::isSPMDMode()); +} + +void __kmpc_distribute_static_init_4u(IdentTy *loc, int32_t global_tid, + int32_t schedtype, int32_t *plastiter, + uint32_t *plower, uint32_t *pupper, + int32_t *pstride, int32_t incr, + int32_t chunk) { + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + mapping::isSPMDMode()); +} + +void __kmpc_distribute_static_init_8(IdentTy *loc, int32_t global_tid, + int32_t schedtype, int32_t *plastiter, + int64_t *plower, int64_t *pupper, + int64_t *pstride, int64_t incr, + int64_t chunk) { + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + mapping::isSPMDMode()); +} + +void __kmpc_distribute_static_init_8u(IdentTy *loc, int32_t global_tid, + int32_t schedtype, int32_t *plastiter, + uint64_t *plower, uint64_t *pupper, + int64_t *pstride, int64_t incr, + int64_t chunk) { + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + mapping::isSPMDMode()); +} + void __kmpc_for_static_fini(IdentTy *loc, int32_t global_tid) {} + +void __kmpc_distribute_static_fini(IdentTy *loc, int32_t global_tid) {} } #pragma omp end declare target diff --git a/openmp/libomptarget/deviceRTLs/common/src/loop.cu b/openmp/libomptarget/deviceRTLs/common/src/loop.cu --- a/openmp/libomptarget/deviceRTLs/common/src/loop.cu +++ b/openmp/libomptarget/deviceRTLs/common/src/loop.cu @@ -660,6 +660,52 @@ __kmpc_is_spmd_exec_mode()); } +EXTERN void __kmpc_distribute_static_init_4(kmp_Ident *loc, int32_t global_tid, + int32_t schedtype, + int32_t *plastiter, int32_t *plower, + int32_t *pupper, int32_t *pstride, + int32_t incr, int32_t chunk) { + PRINT0(LD_IO, "call kmpc_distribute_static_init_4\n"); + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + __kmpc_is_spmd_exec_mode()); +} + +EXTERN void __kmpc_distribute_static_init_4u(kmp_Ident *loc, int32_t global_tid, + int32_t schedtype, + int32_t *plastiter, + uint32_t *plower, uint32_t *pupper, + int32_t *pstride, int32_t incr, + int32_t chunk) { + PRINT0(LD_IO, "call kmpc_distribute_static_init_4u\n"); + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + __kmpc_is_spmd_exec_mode()); +} + +EXTERN void __kmpc_distribute_static_init_8(kmp_Ident *loc, int32_t global_tid, + int32_t schedtype, + int32_t *plastiter, int64_t *plower, + int64_t *pupper, int64_t *pstride, + int64_t incr, int64_t chunk) { + PRINT0(LD_IO, "call kmpc_distribute_static_init_8\n"); + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + __kmpc_is_spmd_exec_mode()); +} + +EXTERN void __kmpc_distribute_static_init_8u(kmp_Ident *loc, int32_t global_tid, + int32_t schedtype, + int32_t *plastiter, + uint64_t *plower, uint64_t *pupper, + int64_t *pstride, int64_t incr, + int64_t chunk) { + PRINT0(LD_IO, "call kmpc_distribute_static_init_8u\n"); + omptarget_nvptx_LoopSupport::for_static_init( + global_tid, schedtype, plastiter, plower, pupper, pstride, chunk, + __kmpc_is_spmd_exec_mode()); +} + EXTERN void __kmpc_for_static_init_4_simple_spmd(kmp_Ident *loc, int32_t global_tid, int32_t schedtype, int32_t *plastiter, @@ -756,6 +802,10 @@ /*IsSPMDExecutionMode=*/false); } +EXTERN void __kmpc_distribute_static_fini(kmp_Ident *loc, int32_t global_tid) { + PRINT0(LD_IO, "call kmpc_distribute_static_fini\n"); +} + EXTERN void __kmpc_for_static_fini(kmp_Ident *loc, int32_t global_tid) { PRINT0(LD_IO, "call kmpc_for_static_fini\n"); } diff --git a/openmp/libomptarget/deviceRTLs/interface.h b/openmp/libomptarget/deviceRTLs/interface.h --- a/openmp/libomptarget/deviceRTLs/interface.h +++ b/openmp/libomptarget/deviceRTLs/interface.h @@ -255,6 +255,27 @@ uint64_t *plower, uint64_t *pupper, int64_t *pstride, int64_t incr, int64_t chunk); +// distribute static (no chunk or chunk) +EXTERN void __kmpc_distribute_static_init_4(kmp_Ident *loc, int32_t global_tid, + int32_t sched, int32_t *plastiter, + int32_t *plower, int32_t *pupper, + int32_t *pstride, int32_t incr, + int32_t chunk); +EXTERN void __kmpc_distribute_static_init_4u(kmp_Ident *loc, int32_t global_tid, + int32_t sched, int32_t *plastiter, + uint32_t *plower, uint32_t *pupper, + int32_t *pstride, int32_t incr, + int32_t chunk); +EXTERN void __kmpc_distribute_static_init_8(kmp_Ident *loc, int32_t global_tid, + int32_t sched, int32_t *plastiter, + int64_t *plower, int64_t *pupper, + int64_t *pstride, int64_t incr, + int64_t chunk); +EXTERN void __kmpc_distribute_static_init_8u(kmp_Ident *loc, int32_t global_tid, + int32_t sched, int32_t *plastiter1, + uint64_t *plower, uint64_t *pupper, + int64_t *pstride, int64_t incr, + int64_t chunk); EXTERN void __kmpc_for_static_init_4_simple_spmd(kmp_Ident *loc, int32_t global_tid, int32_t sched, int32_t *plastiter, @@ -304,6 +325,8 @@ EXTERN void __kmpc_for_static_fini(kmp_Ident *loc, int32_t global_tid); +EXTERN void __kmpc_distribute_static_fini(kmp_Ident *loc, int32_t global_tid); + // for dynamic EXTERN void __kmpc_dispatch_init_4(kmp_Ident *loc, int32_t global_tid, int32_t sched, int32_t lower, int32_t upper,