From e9fb0cba580f4012825eac0ad87b68a6bafd175f Mon Sep 17 00:00:00 2001 From: oan Date: Thu, 14 Mar 2019 19:22:04 +0300 Subject: [PATCH] 0030573: OSD_Parallel_TBB: limit number of execution threads using settings of OSD_ThreadPool::DefaultPool() Add tbb::task_scheduler_init to OSD_Parallel::forEach(). --- src/OSD/OSD_Parallel_TBB.cxx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/OSD/OSD_Parallel_TBB.cxx b/src/OSD/OSD_Parallel_TBB.cxx index 508119f393..425fdf2ea6 100644 --- a/src/OSD/OSD_Parallel_TBB.cxx +++ b/src/OSD/OSD_Parallel_TBB.cxx @@ -18,11 +18,13 @@ #ifdef HAVE_TBB #include +#include #include #include #include #include +#include //======================================================================= //function : forEach @@ -34,15 +36,19 @@ void OSD_Parallel::forEach (UniversalIterator& theBegin, const FunctorInterface& theFunctor, Standard_Integer theNbItems) { - (void )theNbItems; try { - tbb::parallel_for_each(theBegin, theEnd, theFunctor); + const Handle(OSD_ThreadPool)& aThreadPool = OSD_ThreadPool::DefaultPool(); + const Standard_Integer aNbThreads = theNbItems > 0 ? + Min (theNbItems, aThreadPool->NbDefaultThreadsToLaunch()) : -1; + + tbb::task_scheduler_init aScheduler (aNbThreads); + tbb::parallel_for_each (theBegin, theEnd, theFunctor); } catch (tbb::captured_exception& anException) { - throw Standard_ProgramError(anException.what()); + throw Standard_ProgramError (anException.what()); } } -#endif /* HAVE_TBB */ \ No newline at end of file +#endif /* HAVE_TBB */