-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathBRAINSThreadControl.cxx
56 lines (53 loc) · 1.96 KB
/
BRAINSThreadControl.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "BRAINSThreadControl.h"
namespace BRAINSUtils
{
StackPushITKDefaultNumberOfThreads::StackPushITKDefaultNumberOfThreads(const int desiredCount) :
#if ITK_VERSION_MAJOR < 5
m_originalThreadValue( itk::MultiThreader::GetGlobalDefaultNumberOfThreads() )
#else
m_originalThreadValue( itk::MultiThreaderBase::GetGlobalDefaultNumberOfThreads() )
#endif
{
int threadCount(-1);
if( desiredCount > 0 ) // NOTE: Default is -1, which then uses the ITK default.
{
// Respect the users request irregardless of what environmental variables are set to.
threadCount = desiredCount;
}
else
{ // If user set desiredCount <= 0, then use evnironmentanl or internal
// ITKv4 values.
threadCount = this->m_originalThreadValue; // This is the old default.
{ // Process the NSLOTS environmental varialble set by the SGE batch
// processing system
int NSLOTSThreadCount(-1);
std::string numThreads;
if( itksys::SystemTools::GetEnv("NSLOTS", numThreads) )
{
std::istringstream s(numThreads, std::istringstream::in);
s >> NSLOTSThreadCount;
}
if( NSLOTSThreadCount > threadCount )
{
threadCount = NSLOTSThreadCount;
}
}
}
if( threadCount > 0 )
{
#if ITK_VERSION_MAJOR < 5
itk::MultiThreader::SetGlobalDefaultNumberOfThreads(threadCount);
#else
itk::MultiThreaderBase::SetGlobalDefaultNumberOfThreads(threadCount);
#endif
}
}
StackPushITKDefaultNumberOfThreads::~StackPushITKDefaultNumberOfThreads()
{
#if ITK_VERSION_MAJOR < 5
itk::MultiThreader::SetGlobalDefaultNumberOfThreads(this->m_originalThreadValue);
#else
itk::MultiThreaderBase::SetGlobalDefaultNumberOfThreads(this->m_originalThreadValue);
#endif
}
}