From fb84ea92b66b5ab79f8f1a63dbf72d1864f41faa Mon Sep 17 00:00:00 2001 From: gregrodgers Date: Thu, 10 Mar 2022 13:48:11 -0600 Subject: [PATCH] [SWDEV-327029] CSG:CEA:HydroC - aomp/clang runtime issue on MI250x increase maximum number of mapped args to 48 from 32 for gyro. This also changes the type for nargs to const to assist optimization Change-Id: I4d885a3905bda897764547194f0a12cedf517a0e (cherry picked from commit bd0a379ee8cf79c133a79eb2884fc9a1a1aca13c) --- .../common/generated_microtask_cases.gen | 420 +++++++++++++++++- .../deviceRTLs/common/src/parallel.cu | 2 +- .../deviceRTLs/common/src/support.cu | 2 +- .../libomptarget/deviceRTLs/common/support.h | 2 +- openmp/libomptarget/deviceRTLs/interface.h | 2 +- 5 files changed, 423 insertions(+), 5 deletions(-) diff --git a/openmp/libomptarget/deviceRTLs/common/generated_microtask_cases.gen b/openmp/libomptarget/deviceRTLs/common/generated_microtask_cases.gen index 9c4e03576c2244..741fb862b0b4f8 100644 --- a/openmp/libomptarget/deviceRTLs/common/generated_microtask_cases.gen +++ b/openmp/libomptarget/deviceRTLs/common/generated_microtask_cases.gen @@ -402,4 +402,422 @@ case 32: , args[24], args[25], args[26], args[27] , args[28], args[29], args[30], args[31] ); -break; \ No newline at end of file +break; +case 33: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32] +); +break; +case 34: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33] +); +break; +case 35: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34] +); +break; +case 36: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +); +break; +case 37: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36] +); +break; +case 38: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37] +); +break; +case 39: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38] +); +break; +case 40: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +); +break; +case 41: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40] +); +break; +case 42: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40], args[41] +); +break; +case 43: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40], args[41], args[42] +); +break; +case 44: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40], args[41], args[42], args[43] +); +break; +case 45: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40], args[41], args[42], args[43] +, args[44] +); +break; +case 46: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40], args[41], args[42], args[43] +, args[44], args[45] +); +break; +/// DONE TO HERE +case 47: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40], args[41], args[42], args[43] +, args[44], args[45], args[46] +); +break; +case 48: +((void (*)(kmp_int32 *, kmp_int32 * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +, void *, void *, void *, void * +))fn)(&global_tid, &bound_tid +, args[0], args[1], args[2], args[3] +, args[4], args[5], args[6], args[7] +, args[8], args[9], args[10], args[11] +, args[12], args[13], args[14], args[15] +, args[16], args[17], args[18], args[19] +, args[20], args[21], args[22], args[23] +, args[24], args[25], args[26], args[27] +, args[28], args[29], args[30], args[31] +, args[32], args[33], args[34], args[35] +, args[36], args[37], args[38], args[39] +, args[40], args[41], args[42], args[43] +, args[44], args[45], args[46], args[47] +); +break; + diff --git a/openmp/libomptarget/deviceRTLs/common/src/parallel.cu b/openmp/libomptarget/deviceRTLs/common/src/parallel.cu index c31b5f408f878a..7c479a7a47b1cf 100644 --- a/openmp/libomptarget/deviceRTLs/common/src/parallel.cu +++ b/openmp/libomptarget/deviceRTLs/common/src/parallel.cu @@ -319,7 +319,7 @@ NOINLINE EXTERN void __kmpc_parallel_51(kmp_Ident *ident, kmp_int32 global_tid, kmp_int32 if_expr, kmp_int32 num_threads, int proc_bind, void *fn, void *wrapper_fn, void **args, - size_t nargs) { + const size_t nargs) { PRINT0(LD_IO | LD_PAR, "call kmpc_parallel_51\n"); // Handle the serialized case first, same for SPMD/non-SPMD diff --git a/openmp/libomptarget/deviceRTLs/common/src/support.cu b/openmp/libomptarget/deviceRTLs/common/src/support.cu index b3bf550364bde8..0161d95631a5da 100644 --- a/openmp/libomptarget/deviceRTLs/common/src/support.cu +++ b/openmp/libomptarget/deviceRTLs/common/src/support.cu @@ -217,7 +217,7 @@ char *GetTeamsReductionScratchpad() { // Invoke an outlined parallel function unwrapping arguments (up // to 32). void __kmp_invoke_microtask(kmp_int32 global_tid, kmp_int32 bound_tid, void *fn, - void **args, size_t nargs) { + void **args, const size_t nargs) { switch (nargs) { #include "common/generated_microtask_cases.gen" default: diff --git a/openmp/libomptarget/deviceRTLs/common/support.h b/openmp/libomptarget/deviceRTLs/common/support.h index dfaf08339e8940..c2b9aaaf787f1a 100644 --- a/openmp/libomptarget/deviceRTLs/common/support.h +++ b/openmp/libomptarget/deviceRTLs/common/support.h @@ -86,6 +86,6 @@ char *GetTeamsReductionScratchpad(); // Invoke an outlined parallel function unwrapping global, shared arguments (up // to 128). void __kmp_invoke_microtask(kmp_int32 global_tid, kmp_int32 bound_tid, void *fn, - void **args, size_t nargs); + void **args, const size_t nargs); #endif diff --git a/openmp/libomptarget/deviceRTLs/interface.h b/openmp/libomptarget/deviceRTLs/interface.h index 5b7d69c923dd79..5524a28accf33e 100644 --- a/openmp/libomptarget/deviceRTLs/interface.h +++ b/openmp/libomptarget/deviceRTLs/interface.h @@ -471,7 +471,7 @@ NOINLINE EXTERN void __kmpc_parallel_51(ident_t *ident, kmp_int32 global_tid, kmp_int32 if_expr, kmp_int32 num_threads, int proc_bind, void *fn, void *wrapper_fn, void **args, - size_t nargs); + const size_t nargs); // SPMD execution mode interrogation function. EXTERN int8_t __kmpc_is_spmd_exec_mode();