mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 12:16:49 +00:00
[OpenMP][VE] Limit the number of threads to create (#66729)
VE supports up to 64 threads per a VE process. So, we limit the number of threads defined by KMP_MAX_NTH. We also modify the __kmp_sys_max_nth initialization to use KMP_MAX_NTH as a limit.
This commit is contained in:
parent
1446e3cf76
commit
7b8130c2c3
@ -1153,8 +1153,15 @@ extern void __kmp_init_target_task();
|
||||
#if defined(PTHREAD_THREADS_MAX) && PTHREAD_THREADS_MAX < INT_MAX
|
||||
#define KMP_MAX_NTH PTHREAD_THREADS_MAX
|
||||
#else
|
||||
#ifdef __ve__
|
||||
// VE's pthread supports only up to 64 threads per a VE process.
|
||||
// Please check p. 14 of following documentation for more details.
|
||||
// https://sxauroratsubasa.sakura.ne.jp/documents/veos/en/VEOS_high_level_design.pdf
|
||||
#define KMP_MAX_NTH 64
|
||||
#else
|
||||
#define KMP_MAX_NTH INT_MAX
|
||||
#endif
|
||||
#endif
|
||||
#endif /* KMP_MAX_NTH */
|
||||
|
||||
#ifdef PTHREAD_STACK_MIN
|
||||
|
@ -1894,6 +1894,13 @@ void __kmp_runtime_initialize(void) {
|
||||
|
||||
/* Query the maximum number of threads */
|
||||
__kmp_type_convert(sysconf(_SC_THREAD_THREADS_MAX), &(__kmp_sys_max_nth));
|
||||
#ifdef __ve__
|
||||
if (__kmp_sys_max_nth == -1) {
|
||||
// VE's pthread supports only up to 64 threads per a VE process.
|
||||
// So we use that KMP_MAX_NTH (predefined as 64) here.
|
||||
__kmp_sys_max_nth = KMP_MAX_NTH;
|
||||
}
|
||||
#else
|
||||
if (__kmp_sys_max_nth == -1) {
|
||||
/* Unlimited threads for NPTL */
|
||||
__kmp_sys_max_nth = INT_MAX;
|
||||
@ -1901,6 +1908,7 @@ void __kmp_runtime_initialize(void) {
|
||||
/* Can't tell, just use PTHREAD_THREADS_MAX */
|
||||
__kmp_sys_max_nth = KMP_MAX_NTH;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Query the minimum stack size */
|
||||
__kmp_sys_min_stksize = sysconf(_SC_THREAD_STACK_MIN);
|
||||
|
Loading…
x
Reference in New Issue
Block a user