From 7c33763ef7d2d545eba1d79719613a5cfb25a7fc Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Thu, 11 Jul 2024 14:32:33 +0200 Subject: [PATCH] BUG: Call `SetGlobalDefaultNumberOfThreads` when processing "-threads" It appears that `SetGlobalMaximumNumberOfThreads` may not affect the size of ITK's ThreadPool. The ThreadPool only uses "GlobalDefaultNumberOfThreads". - Related to ITK issue https://github.com/InsightSoftwareConsortium/ITK/issues/4773 "GlobalDefaultNumberOfThreads should not be greater than GlobalMaximumNumberOfThreads" --- Core/Kernel/elxMainBase.cxx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Core/Kernel/elxMainBase.cxx b/Core/Kernel/elxMainBase.cxx index 0c7993dda..fd1503979 100644 --- a/Core/Kernel/elxMainBase.cxx +++ b/Core/Kernel/elxMainBase.cxx @@ -302,6 +302,11 @@ MainBase::SetMaximumNumberOfThreads() const { const int maximumNumberOfThreads = atoi(maximumNumberOfThreadsString.c_str()); itk::MultiThreaderBase::SetGlobalMaximumNumberOfThreads(maximumNumberOfThreads); + + // The following statement (getting and setting GlobalDefaultNumberOfThreads) may look redundant, but it's not + // (using ITK 5.4.0)! The Set function ensures that GlobalDefaultNumberOfThreads <= GlobalMaximumNumberOfThreads. + // (GlobalDefaultNumberOfThreads is important, as ITK uses this number when constructing the ThreadPool.) + itk::MultiThreaderBase::SetGlobalDefaultNumberOfThreads(itk::MultiThreaderBase::GetGlobalDefaultNumberOfThreads()); } } // end SetMaximumNumberOfThreads()