Skip to content

Commit 74d622d

Browse files
committed
[OpenMP] Add new worksharing definitions into device RTL
This path defines the newly added `__kmpc_disitrute_static_init` functions in the device runtime library. These functions are currently exact copies of the current worksharing method but can be tuned later. Depends on D110429 Reviewed By: tianshilei1992 Differential Revision: https://reviews.llvm.org/D110430
1 parent b4a5543 commit 74d622d

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed

openmp/libomptarget/DeviceRTL/src/Workshare.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,49 @@ void __kmpc_for_static_init_8u(IdentTy *loc, int32_t global_tid,
592592
mapping::isSPMDMode());
593593
}
594594

595+
void __kmpc_distribute_static_init_4(IdentTy *loc, int32_t global_tid,
596+
int32_t schedtype, int32_t *plastiter,
597+
int32_t *plower, int32_t *pupper,
598+
int32_t *pstride, int32_t incr,
599+
int32_t chunk) {
600+
omptarget_nvptx_LoopSupport<int32_t, int32_t>::for_static_init(
601+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
602+
mapping::isSPMDMode());
603+
}
604+
605+
void __kmpc_distribute_static_init_4u(IdentTy *loc, int32_t global_tid,
606+
int32_t schedtype, int32_t *plastiter,
607+
uint32_t *plower, uint32_t *pupper,
608+
int32_t *pstride, int32_t incr,
609+
int32_t chunk) {
610+
omptarget_nvptx_LoopSupport<uint32_t, int32_t>::for_static_init(
611+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
612+
mapping::isSPMDMode());
613+
}
614+
615+
void __kmpc_distribute_static_init_8(IdentTy *loc, int32_t global_tid,
616+
int32_t schedtype, int32_t *plastiter,
617+
int64_t *plower, int64_t *pupper,
618+
int64_t *pstride, int64_t incr,
619+
int64_t chunk) {
620+
omptarget_nvptx_LoopSupport<int64_t, int64_t>::for_static_init(
621+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
622+
mapping::isSPMDMode());
623+
}
624+
625+
void __kmpc_distribute_static_init_8u(IdentTy *loc, int32_t global_tid,
626+
int32_t schedtype, int32_t *plastiter,
627+
uint64_t *plower, uint64_t *pupper,
628+
int64_t *pstride, int64_t incr,
629+
int64_t chunk) {
630+
omptarget_nvptx_LoopSupport<uint64_t, int64_t>::for_static_init(
631+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
632+
mapping::isSPMDMode());
633+
}
634+
595635
void __kmpc_for_static_fini(IdentTy *loc, int32_t global_tid) {}
636+
637+
void __kmpc_distribute_static_fini(IdentTy *loc, int32_t global_tid) {}
596638
}
597639

598640
#pragma omp end declare target

openmp/libomptarget/deviceRTLs/common/src/loop.cu

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,52 @@ EXTERN void __kmpc_for_static_init_8u(kmp_Ident *loc, int32_t global_tid,
660660
__kmpc_is_spmd_exec_mode());
661661
}
662662

663+
EXTERN void __kmpc_distribute_static_init_4(kmp_Ident *loc, int32_t global_tid,
664+
int32_t schedtype,
665+
int32_t *plastiter, int32_t *plower,
666+
int32_t *pupper, int32_t *pstride,
667+
int32_t incr, int32_t chunk) {
668+
PRINT0(LD_IO, "call kmpc_distribute_static_init_4\n");
669+
omptarget_nvptx_LoopSupport<int32_t, int32_t>::for_static_init(
670+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
671+
__kmpc_is_spmd_exec_mode());
672+
}
673+
674+
EXTERN void __kmpc_distribute_static_init_4u(kmp_Ident *loc, int32_t global_tid,
675+
int32_t schedtype,
676+
int32_t *plastiter,
677+
uint32_t *plower, uint32_t *pupper,
678+
int32_t *pstride, int32_t incr,
679+
int32_t chunk) {
680+
PRINT0(LD_IO, "call kmpc_distribute_static_init_4u\n");
681+
omptarget_nvptx_LoopSupport<uint32_t, int32_t>::for_static_init(
682+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
683+
__kmpc_is_spmd_exec_mode());
684+
}
685+
686+
EXTERN void __kmpc_distribute_static_init_8(kmp_Ident *loc, int32_t global_tid,
687+
int32_t schedtype,
688+
int32_t *plastiter, int64_t *plower,
689+
int64_t *pupper, int64_t *pstride,
690+
int64_t incr, int64_t chunk) {
691+
PRINT0(LD_IO, "call kmpc_distribute_static_init_8\n");
692+
omptarget_nvptx_LoopSupport<int64_t, int64_t>::for_static_init(
693+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
694+
__kmpc_is_spmd_exec_mode());
695+
}
696+
697+
EXTERN void __kmpc_distribute_static_init_8u(kmp_Ident *loc, int32_t global_tid,
698+
int32_t schedtype,
699+
int32_t *plastiter,
700+
uint64_t *plower, uint64_t *pupper,
701+
int64_t *pstride, int64_t incr,
702+
int64_t chunk) {
703+
PRINT0(LD_IO, "call kmpc_distribute_static_init_8u\n");
704+
omptarget_nvptx_LoopSupport<uint64_t, int64_t>::for_static_init(
705+
global_tid, schedtype, plastiter, plower, pupper, pstride, chunk,
706+
__kmpc_is_spmd_exec_mode());
707+
}
708+
663709
EXTERN
664710
void __kmpc_for_static_init_4_simple_spmd(kmp_Ident *loc, int32_t global_tid,
665711
int32_t schedtype, int32_t *plastiter,
@@ -756,6 +802,10 @@ void __kmpc_for_static_init_8u_simple_generic(
756802
/*IsSPMDExecutionMode=*/false);
757803
}
758804

805+
EXTERN void __kmpc_distribute_static_fini(kmp_Ident *loc, int32_t global_tid) {
806+
PRINT0(LD_IO, "call kmpc_distribute_static_fini\n");
807+
}
808+
759809
EXTERN void __kmpc_for_static_fini(kmp_Ident *loc, int32_t global_tid) {
760810
PRINT0(LD_IO, "call kmpc_for_static_fini\n");
761811
}

openmp/libomptarget/deviceRTLs/interface.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,27 @@ EXTERN void __kmpc_for_static_init_8u(kmp_Ident *loc, int32_t global_tid,
255255
uint64_t *plower, uint64_t *pupper,
256256
int64_t *pstride, int64_t incr,
257257
int64_t chunk);
258+
// distribute static (no chunk or chunk)
259+
EXTERN void __kmpc_distribute_static_init_4(kmp_Ident *loc, int32_t global_tid,
260+
int32_t sched, int32_t *plastiter,
261+
int32_t *plower, int32_t *pupper,
262+
int32_t *pstride, int32_t incr,
263+
int32_t chunk);
264+
EXTERN void __kmpc_distribute_static_init_4u(kmp_Ident *loc, int32_t global_tid,
265+
int32_t sched, int32_t *plastiter,
266+
uint32_t *plower, uint32_t *pupper,
267+
int32_t *pstride, int32_t incr,
268+
int32_t chunk);
269+
EXTERN void __kmpc_distribute_static_init_8(kmp_Ident *loc, int32_t global_tid,
270+
int32_t sched, int32_t *plastiter,
271+
int64_t *plower, int64_t *pupper,
272+
int64_t *pstride, int64_t incr,
273+
int64_t chunk);
274+
EXTERN void __kmpc_distribute_static_init_8u(kmp_Ident *loc, int32_t global_tid,
275+
int32_t sched, int32_t *plastiter1,
276+
uint64_t *plower, uint64_t *pupper,
277+
int64_t *pstride, int64_t incr,
278+
int64_t chunk);
258279
EXTERN
259280
void __kmpc_for_static_init_4_simple_spmd(kmp_Ident *loc, int32_t global_tid,
260281
int32_t sched, int32_t *plastiter,
@@ -304,6 +325,8 @@ void __kmpc_for_static_init_8u_simple_generic(
304325

305326
EXTERN void __kmpc_for_static_fini(kmp_Ident *loc, int32_t global_tid);
306327

328+
EXTERN void __kmpc_distribute_static_fini(kmp_Ident *loc, int32_t global_tid);
329+
307330
// for dynamic
308331
EXTERN void __kmpc_dispatch_init_4(kmp_Ident *loc, int32_t global_tid,
309332
int32_t sched, int32_t lower, int32_t upper,

0 commit comments

Comments
 (0)