From 38f516ddaa6cbf72dbda9f301f30d3d3930c6eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C5=BEenan=20Zuki=C4=87?= Date: Mon, 16 Jul 2018 15:38:15 -0400 Subject: [PATCH] ENH: Add backwards compatibility for Get/SetNumberOfThreads SetNumberOfThreads() should be called on processObject->GetMultiThreader()->SetMaximumNumberOfThreads(). But processObject->SetNumberOfWorkUnits() is usually desired now. Change-Id: I20d95b343765dbdb4472d07a3eb5b7f2458800b5 --- Documentation/ITK5MigrationGuide.md | 4 ++- .../Core/Common/include/itkProcessObject.h | 12 ++++++++ .../include/itkObjectToObjectOptimizerBase.h | 22 ++++++++++++--- .../include/itkImageToImageMetricv4.h | 28 +++++++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/Documentation/ITK5MigrationGuide.md b/Documentation/ITK5MigrationGuide.md index 98bcd1b2212..d2e396e8c18 100644 --- a/Documentation/ITK5MigrationGuide.md +++ b/Documentation/ITK5MigrationGuide.md @@ -138,7 +138,9 @@ this->AfterThreadedGenerateData(); Get/Set GlobalMaximumNumberOfThreads and GlobalDefaultNumberOfThreads now reside in `MultiThreaderBase`. With a warning, they are still -available in `PlatformMultiThreader`. +available in `PlatformMultiThreader`. The common case of +`innerFilter->SetNumberOfThreads(1);` should be replaced by +`innerFilter->SetNumberOfWorkUnits(1);`. To transition to the new threading model, it is usually enough to rename `ThreadedGenerateData` into `DynamicThreadedGenerateData`, remove the diff --git a/Modules/Core/Common/include/itkProcessObject.h b/Modules/Core/Common/include/itkProcessObject.h index b70b0160985..ffd76ea5863 100644 --- a/Modules/Core/Common/include/itkProcessObject.h +++ b/Modules/Core/Common/include/itkProcessObject.h @@ -443,6 +443,18 @@ class ITKCommon_EXPORT ProcessObject:public Object itkSetClampMacro(NumberOfWorkUnits, ThreadIdType, 1, ITK_MAX_THREADS); itkGetConstReferenceMacro(NumberOfWorkUnits, ThreadIdType); +#if !defined( ITK_LEGACY_REMOVE ) || defined( ITKV4_COMPATIBILITY ) + itkLegacyMacro(void SetNumberOfThreads(ThreadIdType count)) + { + this->SetNumberOfWorkUnits(count); + } + + itkLegacyMacro(ThreadIdType GetNumberOfThreads() const) + { + return this->GetNumberOfWorkUnits(); + } +#endif // !ITK_LEGACY_REMOVE + /** Return the multithreader used by this class. */ MultiThreaderType * GetMultiThreader() const { return m_MultiThreader; } diff --git a/Modules/Numerics/Optimizersv4/include/itkObjectToObjectOptimizerBase.h b/Modules/Numerics/Optimizersv4/include/itkObjectToObjectOptimizerBase.h index 2e4e1b2c705..ade3e793172 100644 --- a/Modules/Numerics/Optimizersv4/include/itkObjectToObjectOptimizerBase.h +++ b/Modules/Numerics/Optimizersv4/include/itkObjectToObjectOptimizerBase.h @@ -182,12 +182,26 @@ class ITK_TEMPLATE_EXPORT ObjectToObjectOptimizerBaseTemplate : public Object itkGetConstReferenceMacro(DoEstimateScales, bool); itkBooleanMacro(DoEstimateScales); - /** Set the number of threads to use when threading. - * The default is the global default number of threads - * returned from itkMultiThreader. */ + /** Set the number of work units to use when threading. + * The default is the global default number of work units + * decided in the constructor of the MultiThreader. */ virtual void SetNumberOfWorkUnits( ThreadIdType number ); - /** Get the number of threads set to be used. */ +#if !defined( ITK_LEGACY_REMOVE ) + /** Set the number of work units to use when threading. + * + * NOTE: deprecated. Use SetNumberOfWorkUnits() */ + itkLegacyMacro( virtual void SetNumberOfThreads( ThreadIdType number ) ) + { + return this->SetNumberOfWorkUnits( number ); + } + itkLegacyMacro( virtual const ThreadIdType& GetNumberOfThreads() const ) + { + return this->m_NumberOfWorkUnits; + } +#endif // !ITK_LEGACY_REMOVE + + /** Get the number of work units set to be used. */ itkGetConstReferenceMacro( NumberOfWorkUnits, ThreadIdType ); /** Return current number of iterations. */ diff --git a/Modules/Registration/Metricsv4/include/itkImageToImageMetricv4.h b/Modules/Registration/Metricsv4/include/itkImageToImageMetricv4.h index 6d55698630b..e4e21421ffd 100644 --- a/Modules/Registration/Metricsv4/include/itkImageToImageMetricv4.h +++ b/Modules/Registration/Metricsv4/include/itkImageToImageMetricv4.h @@ -457,6 +457,34 @@ class ITK_TEMPLATE_EXPORT ImageToImageMetricv4 virtual void SetMaximumNumberOfWorkUnits( const ThreadIdType workUnits ); virtual ThreadIdType GetMaximumNumberOfWorkUnits() const; +#if !defined ( ITK_LEGACY_REMOVE ) + /** Get number of threads to used in the the most recent + * evaluation. Only valid after GetValueAndDerivative() or + * GetValue() has been called. + * + * NOTE: deprecated. Use GetNumberOfWorkUnitsUsed() */ + itkLegacyMacro( virtual ThreadIdType GetNumberOfThreadsUsed() const ) + { + return this->GetNumberOfWorkUnitsUsed(); + } + + /** Set number of threads to use. This the maximum number of threads to use + * when multithreaded. The actual number of threads used (may be less than + * this value) can be obtained with \c GetNumberOfWorkUnitsUsed. + * + * NOTE: deprecated. Use SetMaximumNumberOfWorkUnits() and + * GetMaximumNumberOfWorkUnits() */ + itkLegacyMacro( virtual void SetMaximumNumberOfThreads( const ThreadIdType count ) ) + { + this->SetMaximumNumberOfWorkUnits(count); + } + itkLegacyMacro( virtual ThreadIdType GetMaximumNumberOfThreads() const ) + { + return this->GetMaximumNumberOfWorkUnits(); + } +#endif // !ITK_LEGACY_REMOVE + + /** * Finalize the per-thread components for computing * metric. Some threads can accumulate their data