From e9ed61ccf7806d6ebf77c3a2bf9ad82d3aae813d Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Tue, 28 Aug 2018 03:35:26 -0700 Subject: [PATCH 1/8] use cached version of get thread max --- src/engine/openmp.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index 8fe3939892d2..e14786023e16 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -84,7 +84,7 @@ void OpenMP::set_reserve_cores(int cores) { 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(); From 2c0b0e9df457751fd4856a70bf3c82df1ce13a3b Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Tue, 28 Aug 2018 08:01:47 -0700 Subject: [PATCH 2/8] reserve core affects omp singleton --- src/engine/openmp.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index e14786023e16..2a39ff47cfc0 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -74,9 +74,9 @@ void OpenMP::set_reserve_cores(int cores) { reserve_cores_ = cores; #ifdef _OPENMP if (reserve_cores_ >= omp_thread_max_) { - omp_set_num_threads(1); + omp_thread_max_ = 1; } else { - omp_set_num_threads(omp_thread_max_ - reserve_cores_); + omp_thread_max_ -= reserve_cores_; } #endif } From f9d8746a23e6a6f96128710b012d8f4292b5ead4 Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Thu, 18 Oct 2018 18:22:58 -0700 Subject: [PATCH 3/8] omp_thread_max_ updated in one line --- src/engine/openmp.cc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index 2a39ff47cfc0..35e7a4c6d9fa 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -73,11 +73,7 @@ void OpenMP::set_reserve_cores(int cores) { CHECK_GE(cores, 0); reserve_cores_ = cores; #ifdef _OPENMP - if (reserve_cores_ >= omp_thread_max_) { - omp_thread_max_ = 1; - } else { - omp_thread_max_ -= reserve_cores_; - } + omp_thread_max_ = std::max(omp_thread_max_ - reserve_cores_, 1); #endif } From 9be6f2eb53272b7398da79d2ffc0d0f45a7016e3 Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Fri, 19 Oct 2018 12:47:12 -0700 Subject: [PATCH 4/8] remove enabled block --- src/engine/openmp.cc | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index 35e7a4c6d9fa..0e0ab82e7266 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -79,24 +79,8 @@ void OpenMP::set_reserve_cores(int cores) { int OpenMP::GetRecommendedOMPThreadCount(bool exclude_reserved) const { #ifdef _OPENMP - if (omp_num_threads_set_in_environment_) { + if (omp_num_threads_set_in_environment_ || enabled_) return omp_thread_max_; - } - if (enabled_) { - int thread_count = omp_get_max_threads(); - if (exclude_reserved) { - if (reserve_cores_ >= thread_count) { - thread_count = 1; - } else { - thread_count -= reserve_cores_; - } - } - // Check that OMP doesn't suggest more than our 'omp_thread_max_' value - if (!omp_thread_max_ || thread_count < omp_thread_max_) { - return thread_count; - } - return omp_thread_max_; - } return 1; #else return 1; From e2170139f3353046e9aa2c18076e638eac116118 Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Mon, 22 Oct 2018 11:07:41 -0700 Subject: [PATCH 5/8] add brackets --- src/engine/openmp.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index 0e0ab82e7266..ef4e458fa916 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -79,8 +79,9 @@ void OpenMP::set_reserve_cores(int cores) { int OpenMP::GetRecommendedOMPThreadCount(bool exclude_reserved) const { #ifdef _OPENMP - if (omp_num_threads_set_in_environment_ || enabled_) + if (omp_num_threads_set_in_environment_ || enabled_) { return omp_thread_max_; + } return 1; #else return 1; From fbeb0819f6c058efb9e741b503d05fd4f30cdf98 Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Tue, 13 Nov 2018 13:22:47 -0800 Subject: [PATCH 6/8] re-add excluded reserved --- src/engine/openmp.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index ef4e458fa916..8d864e49b1bc 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -79,10 +79,24 @@ void OpenMP::set_reserve_cores(int cores) { int OpenMP::GetRecommendedOMPThreadCount(bool exclude_reserved) const { #ifdef _OPENMP - if (omp_num_threads_set_in_environment_ || enabled_) { + if (omp_num_threads_set_in_environment_) { return omp_thread_max_; } - return 1; + if (enabled_) { + if (exclude_reserved) { + if (reserve_cores_ >= thread_count) { + thread_count = 1; + } else { + thread_count -= reserve_cores_; + } + } + // Check that OMP doesn't suggest more than our 'omp_thread_max_' value + if (!omp_thread_max_ || thread_count < omp_thread_max_) { + return thread_count; + } + return omp_thread_max_; + } + #else return 1; #endif From 2145a7edfbf80023a0a40dd370d7dda2f61cdf49 Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Tue, 13 Nov 2018 14:29:45 -0800 Subject: [PATCH 7/8] add missing var --- src/engine/openmp.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index 8d864e49b1bc..4fa5d986408f 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -83,6 +83,7 @@ int OpenMP::GetRecommendedOMPThreadCount(bool exclude_reserved) const { return omp_thread_max_; } if (enabled_) { + int thread_count = omp_get_max_threads(); if (exclude_reserved) { if (reserve_cores_ >= thread_count) { thread_count = 1; From 467d8128fbbfda8c5e612f6f1f98095e4c64ebbb Mon Sep 17 00:00:00 2001 From: Alexander Zai Date: Tue, 13 Nov 2018 14:31:06 -0800 Subject: [PATCH 8/8] refactor macro --- src/engine/openmp.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/engine/openmp.cc b/src/engine/openmp.cc index 4fa5d986408f..64899b09660e 100644 --- a/src/engine/openmp.cc +++ b/src/engine/openmp.cc @@ -97,10 +97,8 @@ int OpenMP::GetRecommendedOMPThreadCount(bool exclude_reserved) const { } return omp_thread_max_; } - -#else - return 1; #endif + return 1; } OpenMP *__init_omp__ = OpenMP::Get();