Geant4-11
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Static Private Member Functions
PTL::TaskRunManager Class Reference

#include <TaskRunManager.hh>

Inheritance diagram for PTL::TaskRunManager:
G4TaskRunManager

Public Types

typedef TaskRunManagerpointer
 

Public Member Functions

virtual size_t GetNumberActiveThreads () const
 
virtual int GetNumberOfThreads () const
 
TaskManagerGetTaskManager () const
 
ThreadPoolGetThreadPool () const
 
int GetVerbose () const
 
virtual void Initialize (uint64_t n=std::thread::hardware_concurrency())
 
bool IsInitialized () const
 
void SetVerbose (int val)
 
 TaskRunManager (bool useTBB=false)
 
virtual void Terminate ()
 
virtual ~TaskRunManager ()=default
 

Static Public Member Functions

static TaskRunManagerGetInstance (bool useTBB=false)
 
static TaskRunManagerGetMasterRunManager (bool useTBB=false)
 

Protected Attributes

bool m_is_initialized = false
 
TaskManagerm_task_manager = nullptr
 
VUserTaskQueuem_task_queue = nullptr
 
ThreadPoolm_thread_pool = nullptr
 
int m_verbose = 0
 
uint64_t m_workers = 0
 

Static Private Member Functions

static pointerGetPrivateMasterRunManager (bool init, bool useTBB=false)
 

Detailed Description

Definition at line 44 of file TaskRunManager.hh.

Member Typedef Documentation

◆ pointer

Definition at line 47 of file TaskRunManager.hh.

Constructor & Destructor Documentation

◆ TaskRunManager()

TaskRunManager::TaskRunManager ( bool  useTBB = false)
explicit

Definition at line 65 of file TaskRunManager.cc.

66: m_workers(std::thread::hardware_concurrency())
67{
69 {
70 GetPrivateMasterRunManager(false) = this;
71 }
72
73#if defined(PTL_USE_TBB)
74 auto _useTBB = GetEnv<bool>("PTL_FORCE_TBB", GetEnv<bool>("FORCE_TBB", useTBB));
75 if(_useTBB)
76 useTBB = true;
77#endif
78
79 // handle TBB
81 m_workers = GetEnv<uint64_t>("PTL_NUM_THREADS", m_workers);
82}
static pointer & GetPrivateMasterRunManager(bool init, bool useTBB=false)
static void set_use_tbb(bool val)
Definition: ThreadPool.cc:102

References GetPrivateMasterRunManager(), m_workers, and PTL::ThreadPool::set_use_tbb().

Referenced by GetPrivateMasterRunManager().

◆ ~TaskRunManager()

virtual PTL::TaskRunManager::~TaskRunManager ( )
virtualdefault

Member Function Documentation

◆ GetInstance()

TaskRunManager * TaskRunManager::GetInstance ( bool  useTBB = false)
static

Definition at line 58 of file TaskRunManager.cc.

59{
60 return GetMasterRunManager(useTBB);
61}
static TaskRunManager * GetMasterRunManager(bool useTBB=false)

References GetMasterRunManager().

◆ GetMasterRunManager()

TaskRunManager * TaskRunManager::GetMasterRunManager ( bool  useTBB = false)
static

Definition at line 49 of file TaskRunManager.cc.

50{
51 static pointer& _instance = GetPrivateMasterRunManager(true, useTBB);
52 return _instance;
53}
TaskRunManager * pointer

References GetPrivateMasterRunManager().

Referenced by PTL::internal::get_default_threadpool(), PTL::TaskManager::GetInstance(), GetInstance(), and PTL::VUserTaskQueue::VUserTaskQueue().

◆ GetNumberActiveThreads()

virtual size_t PTL::TaskRunManager::GetNumberActiveThreads ( ) const
inlinevirtual

Reimplemented in G4TaskRunManager.

Definition at line 62 of file TaskRunManager.hh.

63 {
64 return (m_thread_pool) ? m_thread_pool->size() : 0;
65 }
ThreadPool * m_thread_pool
size_type size() const
Definition: ThreadPool.hh:163

References m_thread_pool, and PTL::ThreadPool::size().

Referenced by G4TaskRunManager::GetNumberActiveThreads().

◆ GetNumberOfThreads()

virtual int PTL::TaskRunManager::GetNumberOfThreads ( ) const
inlinevirtual

Reimplemented in G4TaskRunManager.

Definition at line 58 of file TaskRunManager.hh.

59 {
60 return (m_thread_pool) ? m_thread_pool->size() : 0;
61 }

References m_thread_pool, and PTL::ThreadPool::size().

Referenced by G4TaskRunManager::GetNumberOfThreads(), and PTL::VUserTaskQueue::VUserTaskQueue().

◆ GetPrivateMasterRunManager()

TaskRunManager::pointer & TaskRunManager::GetPrivateMasterRunManager ( bool  init,
bool  useTBB = false 
)
staticprivate

Definition at line 40 of file TaskRunManager.cc.

41{
42 static pointer _instance = (init) ? new TaskRunManager(useTBB) : nullptr;
43 return _instance;
44}
TaskRunManager(bool useTBB=false)

References TaskRunManager().

Referenced by GetMasterRunManager(), and TaskRunManager().

◆ GetTaskManager()

TaskManager * PTL::TaskRunManager::GetTaskManager ( ) const
inline

◆ GetThreadPool()

ThreadPool * PTL::TaskRunManager::GetThreadPool ( ) const
inline

◆ GetVerbose()

int PTL::TaskRunManager::GetVerbose ( ) const
inline

Definition at line 74 of file TaskRunManager.hh.

74{ return m_verbose; }

References m_verbose.

Referenced by G4TaskRunManager::InitializeThreadPool().

◆ Initialize()

void TaskRunManager::Initialize ( uint64_t  n = std::thread::hardware_concurrency())
virtual

Reimplemented in G4TaskRunManager.

Definition at line 87 of file TaskRunManager.cc.

88{
89 m_workers = n;
90
91 // create threadpool if needed + task manager
92 if(!m_thread_pool)
93 {
94 if(m_verbose > 0)
95 std::cout << "TaskRunManager :: Creating thread pool..." << std::endl;
97 if(m_verbose > 0)
98 std::cout << "TaskRunManager :: Creating task manager..." << std::endl;
100 }
101 // or resize
102 else if(m_workers != m_thread_pool->size())
103 {
104 if(m_verbose > 0)
105 {
106 std::cout << "TaskRunManager :: Resizing thread pool from "
107 << m_thread_pool->size() << " to " << m_workers << " threads ..."
108 << std::endl;
109 }
111 }
112
113 // create the joiners
115 {
116 if(m_verbose > 0)
117 std::cout << "TaskRunManager :: Using TBB..." << std::endl;
118 }
119 else
120 {
121 if(m_verbose > 0)
122 std::cout << "TaskRunManager :: Using ThreadPool..." << std::endl;
123 }
124
125 m_is_initialized = true;
126 if(m_verbose > 0)
127 std::cout << "TaskRunManager :: initialized..." << std::endl;
128}
VUserTaskQueue * m_task_queue
static bool using_tbb()
Definition: ThreadPool.cc:94
void resize(size_type _n)
Definition: ThreadPool.hh:342

References m_is_initialized, m_task_manager, m_task_queue, m_thread_pool, m_verbose, m_workers, CLHEP::detail::n, PTL::ThreadPool::resize(), PTL::ThreadPool::size(), and PTL::ThreadPool::using_tbb().

Referenced by G4TaskRunManager::Initialize(), and G4TaskRunManager::InitializeThreadPool().

◆ IsInitialized()

bool PTL::TaskRunManager::IsInitialized ( ) const
inline

Definition at line 73 of file TaskRunManager.hh.

73{ return m_is_initialized; }

References m_is_initialized.

◆ SetVerbose()

void PTL::TaskRunManager::SetVerbose ( int  val)
inline

Definition at line 75 of file TaskRunManager.hh.

75{ m_verbose = val; }

References m_verbose.

Referenced by G4TaskRunManager::InitializeThreadPool().

◆ Terminate()

void TaskRunManager::Terminate ( )
virtual

Definition at line 133 of file TaskRunManager.cc.

134{
135 m_is_initialized = false;
136 if(m_thread_pool)
138 delete m_task_manager;
139 delete m_thread_pool;
140 m_task_manager = nullptr;
141 m_thread_pool = nullptr;
142}
size_type destroy_threadpool()
Definition: ThreadPool.cc:364

References PTL::ThreadPool::destroy_threadpool(), m_is_initialized, m_task_manager, and m_thread_pool.

Referenced by G4TaskRunManager::~G4TaskRunManager().

Field Documentation

◆ m_is_initialized

bool PTL::TaskRunManager::m_is_initialized = false
protected

Definition at line 87 of file TaskRunManager.hh.

Referenced by Initialize(), IsInitialized(), and Terminate().

◆ m_task_manager

TaskManager* PTL::TaskRunManager::m_task_manager = nullptr
protected

Definition at line 92 of file TaskRunManager.hh.

Referenced by GetTaskManager(), Initialize(), and Terminate().

◆ m_task_queue

VUserTaskQueue* PTL::TaskRunManager::m_task_queue = nullptr
protected

Definition at line 90 of file TaskRunManager.hh.

Referenced by Initialize().

◆ m_thread_pool

ThreadPool* PTL::TaskRunManager::m_thread_pool = nullptr
protected

◆ m_verbose

int PTL::TaskRunManager::m_verbose = 0
protected

Definition at line 88 of file TaskRunManager.hh.

Referenced by GetVerbose(), Initialize(), and SetVerbose().

◆ m_workers

uint64_t PTL::TaskRunManager::m_workers = 0
protected

Definition at line 89 of file TaskRunManager.hh.

Referenced by Initialize(), and TaskRunManager().


The documentation for this class was generated from the following files: