Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/ptl/src/TaskRunManager.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/ptl/src/TaskRunManager.cc (Version 11.3.0) and /externals/ptl/src/TaskRunManager.cc (Version 9.1.p1)


  1 //                                                  1 
  2 // MIT License                                    
  3 // Copyright (c) 2020 Jonathan R. Madsen          
  4 // Permission is hereby granted, free of charg    
  5 // of this software and associated documentati    
  6 // in the Software without restriction, includ    
  7 // to use, copy, modify, merge, publish, distr    
  8 // copies of the Software, and to permit perso    
  9 // furnished to do so, subject to the followin    
 10 // The above copyright notice and this permiss    
 11 // all copies or substantial portions of the S    
 12 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPR    
 13 // LIMITED TO THE WARRANTIES OF MERCHANTABILIT    
 14 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SH    
 15 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR    
 16 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARIS    
 17 // WITH THE SOFTWARE OR THE USE OR OTHER DEALI    
 18 //                                                
 19 // -------------------------------------------    
 20 //  Tasking class implementation                  
 21 #include "PTL/TaskRunManager.hh"                  
 22                                                   
 23 #include "PTL/TaskManager.hh"                     
 24 #include "PTL/ThreadPool.hh"                      
 25                                                   
 26 namespace PTL                                     
 27 {                                                 
 28 //============================================    
 29                                                   
 30 TaskRunManager::pointer&                          
 31 TaskRunManager::GetPrivateMasterRunManager()      
 32 {                                                 
 33     static pointer _instance = nullptr;           
 34     return _instance;                             
 35 }                                                 
 36                                                   
 37 //============================================    
 38                                                   
 39 TaskRunManager::pointer&                          
 40 TaskRunManager::GetPrivateMasterRunManager(boo    
 41 {                                                 
 42     auto& _v = GetPrivateMasterRunManager();      
 43     if(!init)                                     
 44         return _v;                                
 45     if(!_v)                                       
 46         _v = new TaskRunManager(useTBB);          
 47     return _v;                                    
 48 }                                                 
 49                                                   
 50 //============================================    
 51                                                   
 52 TaskRunManager*                                   
 53 TaskRunManager::GetMasterRunManager(bool useTB    
 54 {                                                 
 55     auto& _v = GetPrivateMasterRunManager(true    
 56     return _v;                                    
 57 }                                                 
 58                                                   
 59 //============================================    
 60                                                   
 61 TaskRunManager*                                   
 62 TaskRunManager::GetInstance(bool useTBB)          
 63 {                                                 
 64     return GetMasterRunManager(useTBB);           
 65 }                                                 
 66                                                   
 67 //============================================    
 68                                                   
 69 TaskRunManager::TaskRunManager(bool useTBB)       
 70 : m_workers(std::thread::hardware_concurrency(    
 71 , m_use_tbb(useTBB)                               
 72 {                                                 
 73     if(!GetPrivateMasterRunManager())             
 74         GetPrivateMasterRunManager() = this;      
 75 }                                                 
 76                                                   
 77 //============================================    
 78                                                   
 79 TaskRunManager::~TaskRunManager()                 
 80 {                                                 
 81     if(GetPrivateMasterRunManager() == this)      
 82         GetPrivateMasterRunManager() = nullptr    
 83 }                                                 
 84                                                   
 85 //============================================    
 86                                                   
 87 void                                              
 88 TaskRunManager::Initialize(uint64_t n)            
 89 {                                                 
 90     m_workers = n;                                
 91                                                   
 92     // create threadpool if needed + task mana    
 93     if(!m_thread_pool)                            
 94     {                                             
 95         ThreadPool::Config cfg;                   
 96         cfg.pool_size  = m_workers;               
 97         cfg.task_queue = m_task_queue;            
 98         cfg.use_tbb    = m_use_tbb;               
 99         m_thread_pool  = new ThreadPool(cfg);     
100         m_task_manager = new TaskManager(m_thr    
101     }                                             
102     // or resize                                  
103     else if(m_workers != m_thread_pool->size()    
104     {                                             
105         m_thread_pool->resize(m_workers);         
106     }                                             
107                                                   
108     m_is_initialized = true;                      
109 }                                                 
110                                                   
111 //============================================    
112                                                   
113 void                                              
114 TaskRunManager::Terminate()                       
115 {                                                 
116     m_is_initialized = false;                     
117     if(m_thread_pool)                             
118         m_thread_pool->destroy_threadpool();      
119     delete m_task_manager;                        
120     delete m_thread_pool;                         
121     m_task_manager = nullptr;                     
122     m_thread_pool  = nullptr;                     
123 }                                                 
124                                                   
125 //============================================    
126                                                   
127 }  // namespace PTL                               
128