Loading...
Searching...
No Matches
Classes | Macros
G4MPImanager.hh File Reference

MPI manager class. More...

#include "mpi.h"
#include <fstream>
#include <pthread.h>
#include "globals.hh"

Go to the source code of this file.

Classes

class  G4MPImanager
 

Macros

#define DISALLOW_COPY_AND_ASSIGN(TypeName)
 

Detailed Description

MPI manager class.

Definition in file G4MPImanager.hh.

Macro Definition Documentation

◆ DISALLOW_COPY_AND_ASSIGN

#define DISALLOW_COPY_AND_ASSIGN (   TypeName)
Value:
TypeName(const TypeName&); \
void operator=(const TypeName&)

Definition at line 36 of file G4MPImanager.hh.

45 {
46public:
47 // MPI master rank
48 enum { kRANK_MASTER = 0 };
49
50 enum { // MPI tag
51 kTAG_G4COMMAND = 100,
52 kTAG_G4STATUS = 200,
53 kTAG_G4SEED = 300,
54 kTAG_DATA = 1000,
55 kTAG_HISTO = 1001,
56 kTAG_RUN = 1002,
57 kTAG_CMDSCR = 1003,
58 kTAG_NTUPLE = 1004
59 };
60
61 G4MPImanager(int nof_extra_workers = 0);
62 G4MPImanager(int argc, char** argv, int nof_extra_workers = 0);
64
65 static G4MPImanager* GetManager();
66
67 // set/get methods
68 G4MPIsession* GetMPIsession() const;
69
70 G4int GetVerbose() const;
71 void SetVerbose(G4int iverbose);
72
73 G4int GetTotalSize() const; // get size of all ranks
74 G4int GetActiveSize() const; // get size of ranks wher RunBeamOn is called
75 G4int GetRank() const;
76
77 G4bool IsMaster() const;
78 G4bool IsSlave() const;
79 G4bool IsExtraWorker() const;
80
81 G4bool IsInitMacro() const;
82 const G4String& GetInitFileName() const;
83
84 G4bool IsBatchMode() const;
85 const G4String& GetMacroFileName() const;
86
87 void SetMasterWeight(G4double aweight);
88 G4double GetMasterWeight() const;
89
90 void SetExtraWorker(G4VMPIextraWorker* extraWorker);
91 G4VMPIextraWorker* GetExtraWorker() const;
92
93 G4VMPIseedGenerator* GetSeedGenerator() const;
94
95 // MPI methods
96 G4String BcastCommand(const G4String& command);
97 void ShowStatus();
98 void ShowSeeds();
99 void SetSeed(G4int inode, G4long seed);
100 void WaitBeamOn();
101
102 // methods for MPI environment
103 void DistributeSeeds();
104 void ExecuteMacroFile(const G4String& fname, G4bool qbatch=false);
105 G4bool CheckThreadStatus();
106 void ExecuteThreadCommand(const G4String& command);
107 void ExecuteBeamOnThread(const G4String& command);
108 void JoinBeamOnThread();
109
110 void BeamOn(G4int nevent, G4bool qdivide=true);
111 void Print(const G4String& message);
112 G4int GetEventsInMaster() const {return fevents_in_master;}
113 G4int GetEventsInSlave() const {return fevents_in_slave;}
114
115 // misc
116 void ShowHelp() const;
117
118 const MPI::Intracomm* GetComm() const { return &COMM_G4COMMAND_; }
119 const MPI_Comm* GetProcessingComm() const { return &processing_comm_; }
120 const MPI_Comm* GetCollectingComm() const { return &collecting_comm_; }
121 const MPI_Comm* GetAllComm() const { return &all_comm_; }
122private:
124
125 // internal use
126 void Initialize();
127 void ParseArguments(G4int argc, char** argv);
128 void UpdateStatus();
129
130 static G4MPImanager* g4mpi_;
131 G4MPImessenger* messenger_;
132 G4MPIsession* session_;
133 G4VMPIextraWorker* extra_worker_;
134
135 // seed generator
136 G4VMPIseedGenerator* seed_generator_;
137
138 G4MPIstatus* status_; // status for each node
139
140 G4int verbose_;
141
142 // MPI rank
143 G4bool is_master_;
144 G4bool is_slave_;
145 G4bool is_extra_worker_;
146 G4int rank_;
147 G4int size_; // processing comm size
148 G4int world_size_; // world comm size
149
150 // MPI communicator (when no extra ranks)
151 MPI::Intracomm COMM_G4COMMAND_;
152 // MPI communicator (processing ranks - if ntuple merging)
153 MPI_Comm processing_comm_;
154 // MPI communicator (collecting ranks - if ntuple merging)
155 MPI_Comm collecting_comm_;
156 // MPI communicator (all ranks - if ntuple mergins)
157 MPI_Comm all_comm_;
158 // Interim data - need to be freed
159 MPI_Group world_group_;
160 MPI_Group processing_group_;
161 MPI_Group collecting_group_;
162 MPI_Group all_group_;
163
164 // cout/cerr control
165 G4bool qfcout_;
166 std::ofstream fscout_;
167
168 // init/macro file
169 G4bool qinitmacro_;
170 G4String init_file_name_;
171 G4bool qbatchmode_;
172 G4String macro_file_name_;
173
174 // for beamOn
175 pthread_t thread_id_;
176 G4int fevents_in_master = 0;
177 G4int fevents_in_slave = 0;
178
179 // parallel parameters
180 G4double master_weight_;
181 G4int nof_extra_workers_;
182};
183
184// ====================================================================
186{
187 return session_;
188}
189
190inline G4int G4MPImanager::GetVerbose() const
191{
192 return verbose_;
193}
194
195inline void G4MPImanager::SetVerbose(G4int iverbose)
196{
197 G4int lv = iverbose;
198 if( iverbose > 1 ) lv = 1;
199 if( iverbose < 0 ) lv = 0;
200
201 verbose_ = lv;
202 return;
203}
204
205inline G4int G4MPImanager::GetRank() const
206{
207 return rank_;
208}
209
210inline G4int G4MPImanager::GetTotalSize() const
211{
212 return world_size_;
213}
214
215inline G4int G4MPImanager::GetActiveSize() const
216{
217 return size_;
218}
219
220inline G4bool G4MPImanager::IsMaster() const
221{
222 return is_master_;
223}
224
225inline G4bool G4MPImanager::IsSlave() const
226{
227 return is_slave_;
228}
229
230inline G4bool G4MPImanager::IsExtraWorker() const
231{
232 return is_extra_worker_;
233}
234
235inline G4bool G4MPImanager::IsInitMacro() const
236{
237 return qinitmacro_;
238
239}
240
241inline const G4String& G4MPImanager::GetInitFileName() const
242{
243 return init_file_name_;
244
245}
246
247inline G4bool G4MPImanager::IsBatchMode() const
248{
249 return qbatchmode_;
250}
251
252inline const G4String& G4MPImanager::GetMacroFileName() const
253{
254 return macro_file_name_;
255}
256
257inline void G4MPImanager::SetMasterWeight(G4double aweight)
258{
259 master_weight_ = aweight;
260
261 if( aweight < 0. ) master_weight_ = 0.;
262 if( aweight > 1. ) master_weight_ = 1.;
263}
264
265inline G4double G4MPImanager::GetMasterWeight() const
266{
267 return master_weight_;
268}
269
271{
272 return extra_worker_;
273}
274
276{
277 return seed_generator_;
278}
279
280#endif
void Print(const std::vector< T > &data)
Definition DicomRun.hh:109
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
const int kTAG_NTUPLE
G4String macro_file_name_
G4bool IsExtraWorker() const
G4MPIsession * session_
G4VMPIseedGenerator * GetSeedGenerator() const
const G4String & GetMacroFileName() const
void SetMasterWeight(G4double aweight)
void SetVerbose(G4int iverbose)
G4VMPIseedGenerator * seed_generator_
G4bool IsInitMacro() const
G4String init_file_name_
G4int GetActiveSize() const
G4bool IsBatchMode() const
G4VMPIextraWorker * extra_worker_
G4double master_weight_
G4bool is_extra_worker_
G4int GetTotalSize() const
G4int GetRank() const
const G4String & GetInitFileName() const
G4MPIsession * GetMPIsession() const
G4double GetMasterWeight() const
G4VMPIextraWorker * GetExtraWorker() const
G4bool IsMaster() const
G4bool IsSlave() const
G4int GetVerbose() const
void Initialize()
Definition errProp.cc:100
void message(G4RunManager *runmanager)
ts_scorers example shows how to use global scorers.
Definition ts_scorers.cc:71

Applications | User Support | Publications | Collaboration