#include <G4MPIscorerMerger.hh>
Definition at line 37 of file G4MPIscorerMerger.hh.
◆ G4MPIscorerMerger() [1/2]
G4MPIscorerMerger::G4MPIscorerMerger |
( |
| ) |
|
Definition at line 34 of file G4MPIscorerMerger.cc.
G4ScoringManager * scoringManager
unsigned int destinationRank
G4int outputBufferPosition
◆ G4MPIscorerMerger() [2/2]
Definition at line 40 of file G4MPIscorerMerger.cc.
G4ScoringManager * scoringManager
unsigned int destinationRank
G4int outputBufferPosition
◆ ~G4MPIscorerMerger()
G4MPIscorerMerger::~G4MPIscorerMerger |
( |
| ) |
|
|
virtual |
◆ CalculatePackSize() [1/3]
Definition at line 393 of file G4MPIscorerMerger.cc.
395 DMSG(3,
"Calculating dimension of data to send");
396 if ( sm ==
nullptr )
return 0;
402 G4int size =
sizeof(
unsigned int);
406 size +=
sizeof(
unsigned int);
size_t GetNumberOfMesh() const
G4VScoringMesh * GetMesh(G4int i) const
G4int CalculatePackSize(const G4ScoringManager *) const
◆ CalculatePackSize() [2/3]
Definition at line 412 of file G4MPIscorerMerger.cc.
414 DMSG(3,
"Calculating size for mesh: "<<mesh);
416 G4int size =
sizeof(
unsigned int);
418 for (
const auto&
ele : map ) {
420 size +=
sizeof(
unsigned int);
422 size +=
sizeof(char)*name.size();
425 DMSG(3,
"mesh "<<mesh<<
" size: "<<size);
std::map< G4String, G4THitsMap< G4double > *> MeshScoreMap
MeshScoreMap GetScoreMap() const
static const G4double ele
G4int CalculatePackSize(const G4ScoringManager *) const
◆ CalculatePackSize() [3/3]
G4int G4MPIscorerMerger::CalculatePackSize |
( |
const HitMap * |
map | ) |
const |
|
protected |
Definition at line 429 of file G4MPIscorerMerger.cc.
431 G4int size =
sizeof(
unsigned int);
432 size +=
sizeof(
G4int)*numEls;
434 DMSG(3,
"HitMap "<<map<<
" size: "<<size<<
" in "<<numEls<<
" elements.");
virtual size_t GetSize() const
◆ DestroyBuffer()
void G4MPIscorerMerger::DestroyBuffer |
( |
| ) |
|
|
inlineprotected |
◆ Merge()
void G4MPIscorerMerger::Merge |
( |
| ) |
|
Definition at line 87 of file G4MPIscorerMerger.cc.
88 DMSG(0,
"G4MPIscorerMerger::Merge called");
89 const unsigned int myrank = MPI::COMM_WORLD.Get_rank();
90 commSize = MPI::COMM_WORLD.Get_size();
92 DMSG(1,
"Comm world size is 1, nothing to do");
95 comm = MPI::COMM_WORLD.Dup();
114 const G4double sttime = MPI::Wtime();
117 typedef std::function<void(unsigned int)> handler_t;
118 using std::placeholders::_1;
121 std::function<void(void)> barrier = std::bind(&MPI::Intracomm::Barrier,&
comm);
140 const G4double elapsed = MPI::Wtime() - sttime;
145 G4cout<<
"G4MPIscorerMerger::Merge() -data transfer performances: " 146 <<double(total)/1000./elapsed<<
" kB/s" 147 <<
" (Total Data Transfer= "<<double(total)/1000.<<
" kB in " 148 <<elapsed<<
" s)."<<
G4endl;
165 DMSG(0,
"G4MPIscorerMerger::Merge done.");
unsigned int destinationRank
void Merge(std::function< void(unsigned int)> senderF, std::function< void(unsigned int)> receiverF, std::function< void(void)> barrierF, unsigned int commSize, unsigned int myrank)
void Send(const unsigned int destination)
void Receive(const unsigned int source)
G4GLOB_DLL std::ostream G4cout
G4double total(Particle const *const p1, Particle const *const p2)
◆ Pack() [1/3]
Pack all meshes into buffer.
Definition at line 223 of file G4MPIscorerMerger.cc.
226 G4Exception(
"G4MPIscorerMerger::Pack(const G4ScoringManager*)",
228 "Call SetOututBuffer before trying to pack");
233 MPI_Pack(&numMeshes,1,MPI::UNSIGNED,
237 for (
size_t i = 0; i <numMeshes; ++i)
void Pack(const G4ScoringManager *)
Pack all meshes into buffer.
size_t GetNumberOfMesh() const
G4VScoringMesh * GetMesh(G4int i) const
int MPI_Pack(const void *, int, MPI_Datatype, void *, int, int *, MPI_Comm)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4int outputBufferPosition
◆ Pack() [2/3]
Pack a single mesh.
Definition at line 284 of file G4MPIscorerMerger.cc.
285 assert(mesh!=
nullptr);
288 DMSG(3,
"Packing mesh: "<<mesh);
291 size_t nummaps = map.size();
295 for (
const auto&
ele: map ) {
297 size_t ss = name.size();
301 #ifdef G4MPI_USE_MPI_PACK_NOT_CONST 302 char*
nn =
new char[name.length()];
303 std::copy(name.begin(),name.end(),
nn);
305 const char* nn = name.c_str();
311 #ifdef G4MPI_USE_MPI_PACK_NOT_CONST void Pack(const G4ScoringManager *)
Pack all meshes into buffer.
std::map< G4String, G4THitsMap< G4double > *> MeshScoreMap
MeshScoreMap GetScoreMap() const
int MPI_Pack(const void *, int, MPI_Datatype, void *, int, int *, MPI_Comm)
G4int outputBufferPosition
static const G4double ele
◆ Pack() [3/3]
void G4MPIscorerMerger::Pack |
( |
const HitMap * |
sm | ) |
|
|
protected |
Pack a single score map.
Definition at line 347 of file G4MPIscorerMerger.cc.
351 DMSG(3,
"Packing hitmap: "<<sm<<
" with: "<<sm->
GetSize()<<
" elements.");
356 const auto& theMap = *sm->
GetMap();
357 std::vector<G4int> ids;
358 std::vector<G4double> vals;
359 std::transform(theMap.begin(),theMap.end(),std::back_inserter(ids),
360 [](decltype(*theMap.begin())&
e){
return e.first;});
361 std::transform(theMap.begin(),theMap.end(),std::back_inserter(vals),
362 [](decltype(*theMap.begin())&
e){
return *
e.second;});
363 assert(ids.size()==vals.size()&&ids.size()==numEl);
std::map< G4int, T * > * GetMap() const
int MPI_Pack(const void *, int, MPI_Datatype, void *, int, int *, MPI_Comm)
G4int outputBufferPosition
virtual size_t GetSize() const
◆ Receive()
void G4MPIscorerMerger::Receive |
( |
const unsigned int |
source | ) |
|
|
protected |
Definition at line 168 of file G4MPIscorerMerger.cc.
169 DMSG(1,
"Receiving scorers");
171 DMSG(2,
"Receiving from: "<<source);
174 const G4int newbuffsize = status.Get_count(MPI::PACKED);
175 DMSG(2,
"Preparing to receive buffer of size: "<<newbuffsize);
178 DMSG(3,
"New larger buffer expected, resize");
182 buffer =
new char[newbuffsize];
185 std::fill( buffer , buffer + newbuffsize , 0 );
189 comm.Recv(buffer, newbuffsize, MPI::PACKED, source,
193 DMSG(1,
"Receiving of comamnd line scorers done");
G4ScoringManager * scoringManager
void UnPackAndMerge(const G4ScoringManager *)
static G4String Status(G4StepStatus stps)
void SetupOutputBuffer(char *buff, G4int size, G4int position)
◆ Send()
void G4MPIscorerMerger::Send |
( |
const unsigned int |
destination | ) |
|
|
protected |
Definition at line 196 of file G4MPIscorerMerger.cc.
197 DMSG(1,
"Sending scorers "<<
this);
204 buffer =
new char[newbuffsize];
207 std::fill( buffer , buffer+newbuffsize,0);
220 DMSG(1,
"Sending done");
void Pack(const G4ScoringManager *)
Pack all meshes into buffer.
G4ScoringManager * scoringManager
G4int outputBufferPosition
G4int CalculatePackSize(const G4ScoringManager *) const
void SetupOutputBuffer(char *buff, G4int size, G4int position)
◆ SetDestinationRank()
void G4MPIscorerMerger::SetDestinationRank |
( |
G4int |
i | ) |
|
|
inline |
◆ SetScoringManager()
◆ SetupOutputBuffer()
void G4MPIscorerMerger::SetupOutputBuffer |
( |
char * |
buff, |
|
|
G4int |
size, |
|
|
G4int |
position |
|
) |
| |
|
inlineprotected |
◆ SetVerbosity()
void G4MPIscorerMerger::SetVerbosity |
( |
G4int |
ver | ) |
|
|
inline |
◆ UnPackAndMerge() [1/2]
Definition at line 246 of file G4MPIscorerMerger.cc.
249 G4Exception(
"G4MPIscorerMerger::UnPack(const G4ScroingManager*)",
251 "Call SetOututBuffer before trying to un-pack");
256 &numMeshes,1,MPI::UNSIGNED,
comm);
259 msg <<
"Number of meshes to unpack ("<<numMeshes;
260 msg <<
") does not correspond to expected number ("<<sm->
GetNumberOfMesh();
262 G4Exception(
"G4MPIscorerMerger::UnPack(const G4ScroingManager*)",
268 for (
size_t i = 0 ; i < numMeshes ; ++i ) {
270 &meshid,1,MPI::UNSIGNED,
comm);
273 msg<<
"Cannot unpack: expecting mesh "<<i<<
" and found "<<meshid;
274 msg<<
" during unpack.";
275 G4Exception(
"G4MPIscorerMerger::UnPack(const G4ScroingManager*)",
int MPI_Unpack(const void *, int, int *, void *, int, MPI_Datatype, MPI_Comm)
std::ostringstream G4ExceptionDescription
void UnPackAndMerge(const G4ScoringManager *)
size_t GetNumberOfMesh() const
G4VScoringMesh * GetMesh(G4int i) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4int outputBufferPosition
◆ UnPackAndMerge() [2/2]
Definition at line 317 of file G4MPIscorerMerger.cc.
320 assert(inmesh!=
nullptr);
321 DMSG(3,
"Preparing to unpack a mesh and merge into: "<<inmesh);
325 &nummaps,1,MPI::UNSIGNED,
comm);
326 for (
size_t i = 0 ; i < nummaps ; ++i ) {
329 &nameSize,1,MPI::UNSIGNED,
comm);
332 char*
name =
new char[nameSize+1];
333 std::fill(name,name+nameSize+1,0);
335 name,nameSize,MPI::CHAR,
comm);
336 const G4String colname(name,nameSize);
int MPI_Unpack(const void *, int, int *, void *, int, MPI_Datatype, MPI_Comm)
void Accumulate(G4THitsMap< G4double > *map)
const G4String & GetWorldName() const
HitMap * UnPackHitMap(const G4String &detName, const G4String &colName)
G4int outputBufferPosition
◆ UnPackHitMap()
Definition at line 372 of file G4MPIscorerMerger.cc.
376 DMSG(3,
"Preparing to unpack a hit map for: "<<detName<<
","<<colName);
379 &numEl,1,MPI::UNSIGNED,
comm);
387 for (
unsigned int i = 0; i<numEl;++i) result->
set(ids[i],vals[i]);
int MPI_Unpack(const void *, int, int *, void *, int, MPI_Datatype, MPI_Comm)
G4int set(const G4int &key, T *&aHit) const
G4THitsMap< G4double > HitMap
G4int outputBufferPosition
◆ bytesSent
long G4MPIscorerMerger::bytesSent |
|
private |
◆ comm
MPI::Intracomm G4MPIscorerMerger::comm |
|
private |
◆ commSize
unsigned int G4MPIscorerMerger::commSize |
|
private |
◆ destinationRank
unsigned int G4MPIscorerMerger::destinationRank |
|
private |
◆ outputBuffer
char* G4MPIscorerMerger::outputBuffer |
|
private |
◆ outputBufferPosition
G4int G4MPIscorerMerger::outputBufferPosition |
|
private |
◆ outputBufferSize
G4int G4MPIscorerMerger::outputBufferSize |
|
private |
◆ ownsBuffer
G4bool G4MPIscorerMerger::ownsBuffer |
|
private |
◆ scoringManager
◆ verbose
G4int G4MPIscorerMerger::verbose |
|
private |
The documentation for this class was generated from the following files: