From efb16fafb0148c6e2c1dbe2b482ef394e262281c Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Thu, 4 Nov 2021 12:11:16 +0100 Subject: [PATCH] Fix miscounting of threadpool size on Linux with OMP_PROC_BIND=TRUE (#3437) * return OMP places (if available, or SC_NPROCESSORS_CONF) for maximum thread count when built with OpenMP --- driver/others/memory.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/driver/others/memory.c b/driver/others/memory.c index 0185fa683..8e601099c 100644 --- a/driver/others/memory.c +++ b/driver/others/memory.c @@ -246,6 +246,14 @@ int get_num_procs(void) { #endif if (!nums) nums = sysconf(_SC_NPROCESSORS_CONF); + +#if defined(USE_OPENMP) +#if _OPENMP >= 201511 + nums = omp_get_num_places(); +#endif + return nums; +#endif + #if !defined(OS_LINUX) return nums; #endif @@ -1806,10 +1814,19 @@ int get_num_procs(void) { #endif if (!nums) nums = sysconf(_SC_NPROCESSORS_CONF); + +#if defined(USE_OPENMP) +/* if (omp_get_proc_bind() != omp_proc_bind_false) */ +#if _OPENMP >= 201511 + nums = omp_get_num_places(); +#endif + return nums; +#endif + #if !defined(OS_LINUX) return nums; #endif - + #if !defined(__GLIBC_PREREQ) return nums; #else