From 75410210e07a5fab5e044348aee276d578d5857e Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Wed, 14 Nov 2018 17:21:25 -0800 Subject: [PATCH] Manually track num_max_thread (#12380) * use cached version of get thread max * reserve core affects omp singleton * omp_thread_max_ updated in one line * remove enabled block * add brackets * re-add excluded reserved * add missing var * refactor macro --- src/engine/openmp.cc | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index 8fe3939892d2..64899b09660e 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -73,18 +73,14 @@ void OpenMP::set_reserve_cores(int cores) { CHECK_GE(cores, 0); reserve_cores_ = cores; #ifdef _OPENMP - if (reserve_cores_ >= omp_thread_max_) { - omp_set_num_threads(1); - } else { - omp_set_num_threads(omp_thread_max_ - reserve_cores_); - } + omp_thread_max_ = std::max(omp_thread_max_ - reserve_cores_, 1); #endif } int OpenMP::GetRecommendedOMPThreadCount(bool exclude_reserved) const { #ifdef _OPENMP if (omp_num_threads_set_in_environment_) { - return omp_get_max_threads(); + return omp_thread_max_; } if (enabled_) { int thread_count = omp_get_max_threads(); @@ -101,10 +97,8 @@ int OpenMP::GetRecommendedOMPThreadCount(bool exclude_reserved) const { } return omp_thread_max_; } - return 1; -#else - return 1; #endif + return 1; } OpenMP *__init_omp__ = OpenMP::Get();