From 6e00c7651b45911428c86c4b36fcc7295eb0f0d2 Mon Sep 17 00:00:00 2001 From: Woody Chow Date: Mon, 29 May 2017 14:16:10 +0900 Subject: [PATCH] Use num_threads clause of #pragma omp parallel instead to avoid calling omp_set_num_threads for the entire application --- modules/core/src/parallel.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/core/src/parallel.cpp b/modules/core/src/parallel.cpp index cf31055c7f..ac5f2e5b98 100644 --- a/modules/core/src/parallel.cpp +++ b/modules/core/src/parallel.cpp @@ -349,7 +349,7 @@ void cv::parallel_for_(const cv::Range& range, const cv::ParallelLoopBody& body, #elif defined HAVE_OPENMP - #pragma omp parallel for schedule(dynamic) + #pragma omp parallel for schedule(dynamic) num_threads(numThreads > 0 ? numThreads : numThreadsMax) for (int i = stripeRange.start; i < stripeRange.end; ++i) pbody(Range(i, i + 1)); @@ -418,7 +418,10 @@ int cv::getNumThreads(void) #elif defined HAVE_OPENMP - return omp_get_max_threads(); + return numThreads > 0 + ? numThreads + : numThreadsMax; + #elif defined HAVE_GCD @@ -463,10 +466,7 @@ void cv::setNumThreads( int threads ) #elif defined HAVE_OPENMP - if(omp_in_parallel()) - return; // can't change number of openmp threads inside a parallel region - - omp_set_num_threads(threads > 0 ? threads : numThreadsMax); + return; // nothing needed as num_threads clause is used in #pragma omp parallel for #elif defined HAVE_GCD