Skip to content

Commit

Permalink
ENH: default number of work units is greater than default number of t…
Browse files Browse the repository at this point in the history
…hreads

Change-Id: I1b79c97f020593e71794b998e865b60d1a95ddef
  • Loading branch information
dzenanz committed Jul 17, 2018
1 parent ffe49d7 commit c26cc5f
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 14 deletions.
8 changes: 6 additions & 2 deletions Modules/Core/Common/src/itkPoolMultiThreader.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,12 @@ PoolMultiThreader::PoolMultiThreader() :
}

ThreadIdType idleCount = std::max<ThreadIdType>(1u, m_ThreadPool->GetNumberOfCurrentlyIdleThreads());
ThreadIdType maxCount = std::max(1u, GetGlobalDefaultNumberOfThreads());
m_NumberOfWorkUnits = std::min(maxCount, idleCount);
ThreadIdType defaultThreads = std::max(1u, GetGlobalDefaultNumberOfThreads());
#if defined( ITKV4_COMPATIBILITY )
m_NumberOfWorkUnits = std::min( defaultThreads, idleCount );
#else
m_NumberOfWorkUnits = std::min( 3 * defaultThreads, idleCount );
#endif
m_MaximumNumberOfThreads = m_ThreadPool->GetMaximumNumberOfThreads();
}

Expand Down
6 changes: 6 additions & 0 deletions Modules/Core/Common/src/itkTBBMultiThreader.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ namespace itk

TBBMultiThreader::TBBMultiThreader()
{
ThreadIdType defaultThreads = std::max( 1u, GetGlobalDefaultNumberOfThreads() );
#if defined( ITKV4_COMPATIBILITY )
m_NumberOfWorkUnits = defaultThreads;
#else
m_NumberOfWorkUnits = 16 * defaultThreads;
#endif
}

TBBMultiThreader::~TBBMultiThreader()
Expand Down
15 changes: 3 additions & 12 deletions Modules/Core/Common/test/itkDataObjectAndProcessObjectTest.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ class TestProcessObject: public ProcessObject

int itkDataObjectAndProcessObjectTest(int, char* [] )
{

// create a TestProcessObject
itk::TestProcessObject::Pointer process = itk::TestProcessObject::New();

Expand Down Expand Up @@ -216,13 +215,13 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
process->ReleaseDataBeforeUpdateFlagOn();
TEST_SET_GET_VALUE( true, process->GetReleaseDataBeforeUpdateFlag() );

TEST_SET_GET_VALUE( itk::MultiThreaderBase::GetGlobalDefaultNumberOfThreads(), process->GetNumberOfWorkUnits() );
TEST_EXPECT_TRUE( itk::MultiThreaderBase::GetGlobalDefaultNumberOfThreads() <= process->GetNumberOfWorkUnits() );
process->SetNumberOfWorkUnits( 11 );
TEST_SET_GET_VALUE( 11, process->GetNumberOfWorkUnits() );
process->SetNumberOfWorkUnits( 0 );
TEST_SET_GET_VALUE( 1, process->GetNumberOfWorkUnits() );
process->SetNumberOfWorkUnits( itk::NumericTraits<itk::ThreadIdType>::max() );
TEST_SET_GET_VALUE( itk::MultiThreaderBase::GetGlobalMaximumNumberOfThreads(), process->GetNumberOfWorkUnits() );
TEST_EXPECT_TRUE( itk::MultiThreaderBase::GetGlobalMaximumNumberOfThreads() <= process->GetNumberOfWorkUnits() );
process->SetNumberOfWorkUnits( itk::MultiThreaderBase::GetGlobalDefaultNumberOfThreads() );
TEST_SET_GET_VALUE( itk::MultiThreaderBase::GetGlobalDefaultNumberOfThreads(), process->GetNumberOfWorkUnits() );

Expand Down Expand Up @@ -266,7 +265,6 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
TEST_SET_GET( input0, process->GetInput(0) );
TEST_SET_GET( input0, process->GetInput("First") );


process->SetNthInput( 1, input1 );
TEST_SET_GET( input1, process->GetInput(1) );
TEST_SET_GET_VALUE( 2, process->GetNumberOfIndexedInputs() );
Expand Down Expand Up @@ -393,7 +391,6 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
TEST_EXPECT_EQUAL( input0, process->GetInput("OptImage") );
TEST_EXPECT_EQUAL( input0, process->GetInput(1) );

//
process = itk::TestProcessObject::New();
process->SetNumberOfRequiredInputs(2);
process->SetPrimaryInputName("Image1");
Expand Down Expand Up @@ -422,12 +419,10 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
TEST_SET_GET_VALUE( 1, process->GetNumberOfIndexedInputs() );
TEST_SET_GET_VALUE( input0, process->GetPrimaryInput() );


process->SetNumberOfIndexedInputs( 0 );
TEST_SET_GET_VALUE( 0, process->GetNumberOfIndexedInputs() );
TEST_SET_GET_NULL_VALUE( process->GetPrimaryInput() );


process->SetNumberOfIndexedInputs( 3 );
TEST_SET_GET_VALUE( 3, process->GetNumberOfIndexedInputs() );
TEST_SET_GET_NULL_VALUE( process->GetPrimaryInput() );
Expand All @@ -439,7 +434,6 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
TEST_SET_GET_VALUE( 0, process->GetNumberOfIndexedInputs() );
TEST_SET_GET_NULL_VALUE( process->GetPrimaryInput() );


// testing RemoveInput
process = itk::TestProcessObject::New();
process->SetNumberOfIndexedInputs( 2 );
Expand All @@ -450,7 +444,6 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
TEST_SET_GET_VALUE( 2, process->GetNumberOfIndexedInputs() );
TEST_SET_GET_VALUE( 1, process->GetNumberOfInputs() );


process->AddRequiredInputName("Req");
process->SetInput( "Req", input0 );
TEST_SET_GET_VALUE( input0, process->GetInput("Req") );
Expand Down Expand Up @@ -482,12 +475,10 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
TEST_SET_GET_VALUE( 1, process->GetNumberOfIndexedOutputs() );
TEST_SET_GET_VALUE( input0, process->GetPrimaryOutput() );


process->SetNumberOfIndexedOutputs( 0 );
TEST_SET_GET_VALUE( 0, process->GetNumberOfIndexedOutputs() );
TEST_SET_GET_NULL_VALUE( process->GetPrimaryOutput() );


process->SetNumberOfIndexedOutputs( 3 );
TEST_SET_GET_VALUE( 3, process->GetNumberOfIndexedOutputs() );
TEST_SET_GET_NULL_VALUE( process->GetPrimaryOutput() );
Expand All @@ -499,11 +490,11 @@ int itkDataObjectAndProcessObjectTest(int, char* [] )
TEST_SET_GET_VALUE( 0, process->GetNumberOfIndexedOutputs() );
TEST_SET_GET_NULL_VALUE( process->GetPrimaryOutput() );


process->SetNumberOfRequiredOutputs(1);
std::cout << process;
process->SetPrimaryOutput( input0 );
std::cout << process;

std::cout << "Test PASSED" << std::endl;
return (EXIT_SUCCESS);
}

0 comments on commit c26cc5f

Please sign in to comment.