![]() |
Peano
|
#include <TreeManagementMessage.h>
Public Types | |
enum class | Action : int { RequestNewRemoteTree =0 , CreateNewRemoteTree =1 , RemoveChildTreeFromBooksAsChildBecameEmpty =2 , JoinWithWorker =3 , Acknowledgement =4 } |
enum | ObjectConstruction { NoData } |
Public Member Functions | |
TreeManagementMessage () | |
TreeManagementMessage (int __masterSpacetreeId, int __workerSpacetreeId, Action __action) | |
int | getMasterSpacetreeId () const |
void | setMasterSpacetreeId (int value) |
int | getWorkerSpacetreeId () const |
void | setWorkerSpacetreeId (int value) |
peano4::parallel::TreeManagementMessage::Action | getAction () const |
void | setAction (Action value) |
TreeManagementMessage (const TreeManagementMessage ©)=default | |
int | getSenderRank () const |
TreeManagementMessage (ObjectConstruction) | |
std::string | toString () const |
Static Public Member Functions | |
static MPI_Datatype | getForkDatatype () |
Hands out MPI datatype if we work without the LLVM MPI extension. | |
static MPI_Datatype | getJoinDatatype () |
static MPI_Datatype | getBoundaryExchangeDatatype () |
static MPI_Datatype | getMultiscaleDataExchangeDatatype () |
static MPI_Datatype | getGlobalCommunciationDatatype () |
static void | freeForkDatatype () |
static void | freeJoinDatatype () |
static void | freeBoundaryExchangeDatatype () |
static void | freeMultiscaleDataExchangeDatatype () |
static void | freeGlobalCommunciationDatatype () |
static void | initDatatype () |
Wrapper around getDatatype() to trigger lazy evaluation if we use the lazy initialisation. | |
static void | shutdownDatatype () |
Free the underlying MPI datatype. | |
static void | send (const peano4::parallel::TreeManagementMessage &buffer, int destination, int tag, MPI_Comm communicator) |
In DaStGen (the first version), I had a non-static version of the send as well as the receive. | |
static void | receive (peano4::parallel::TreeManagementMessage &buffer, int source, int tag, MPI_Comm communicator) |
static void | send (const peano4::parallel::TreeManagementMessage &buffer, int destination, int tag, std::function< void()> startCommunicationFunctor, std::function< void()> waitFunctor, MPI_Comm communicator) |
Alternative to the other send() where I trigger a non-blocking send an then invoke the functor until the corresponding MPI_Test tells me that the message went through. | |
static void | receive (peano4::parallel::TreeManagementMessage &buffer, int source, int tag, std::function< void()> startCommunicationFunctor, std::function< void()> waitFunctor, MPI_Comm communicator) |
static void | sendAndPollDanglingMessages (const peano4::parallel::TreeManagementMessage &message, int destination, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator()) |
static void | receiveAndPollDanglingMessages (peano4::parallel::TreeManagementMessage &message, int source, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator()) |
Private Attributes | |
int | _masterSpacetreeId |
int | _workerSpacetreeId |
Action | _action |
int | _senderDestinationRank |
Static Private Attributes | |
static MPI_Datatype | Datatype = MPI_DATATYPE_NULL |
Whenever we use LLVM's MPI extension (DaStGe), we rely on lazy initialisation of the datatype. | |
Definition at line 27 of file TreeManagementMessage.h.
|
strong |
Enumerator | |
---|---|
RequestNewRemoteTree | |
CreateNewRemoteTree | |
RemoveChildTreeFromBooksAsChildBecameEmpty | |
JoinWithWorker | |
Acknowledgement |
Definition at line 29 of file TreeManagementMessage.h.
Enumerator | |
---|---|
NoData |
Definition at line 120 of file TreeManagementMessage.h.
peano4::parallel::TreeManagementMessage::TreeManagementMessage | ( | ) |
Definition at line 33 of file TreeManagementMessage.h.
peano4::parallel::TreeManagementMessage::TreeManagementMessage | ( | int | __masterSpacetreeId, |
int | __workerSpacetreeId, | ||
Action | __action ) |
Definition at line 10 of file TreeManagementMessage.cpp.
References setAction(), setMasterSpacetreeId(), and setWorkerSpacetreeId().
|
default |
peano4::parallel::TreeManagementMessage::TreeManagementMessage | ( | ObjectConstruction | ) |
Definition at line 124 of file TreeManagementMessage.h.
|
static |
Definition at line 133 of file TreeManagementMessage.cpp.
|
static |
Definition at line 106 of file TreeManagementMessage.cpp.
|
static |
Definition at line 115 of file TreeManagementMessage.cpp.
|
static |
Definition at line 124 of file TreeManagementMessage.cpp.
|
static |
Definition at line 142 of file TreeManagementMessage.cpp.
peano4::parallel::TreeManagementMessage::Action peano4::parallel::TreeManagementMessage::getAction | ( | ) | const |
Definition at line 54 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::SpacetreeSet::addSpacetree(), peano4::parallel::SpacetreeSet::cleanUpTrees(), peano4::parallel::SpacetreeSet::split(), and peano4::parallel::tests::PingPongTest::testDaStGenArrayTreeManagementMessage().
|
static |
Definition at line 94 of file TreeManagementMessage.cpp.
|
static |
Hands out MPI datatype if we work without the LLVM MPI extension.
If we work with this additional feature, this is the routine where the lazy initialisation is done and the datatype is also cached.
Definition at line 76 of file TreeManagementMessage.cpp.
|
static |
Definition at line 82 of file TreeManagementMessage.cpp.
|
static |
Definition at line 88 of file TreeManagementMessage.cpp.
int peano4::parallel::TreeManagementMessage::getMasterSpacetreeId | ( | ) | const |
Definition at line 34 of file TreeManagementMessage.cpp.
|
static |
Definition at line 100 of file TreeManagementMessage.cpp.
int peano4::parallel::TreeManagementMessage::getSenderRank | ( | ) | const |
Definition at line 150 of file TreeManagementMessage.cpp.
int peano4::parallel::TreeManagementMessage::getWorkerSpacetreeId | ( | ) | const |
Definition at line 44 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::SpacetreeSet::split().
|
static |
Wrapper around getDatatype() to trigger lazy evaluation if we use the lazy initialisation.
Definition at line 155 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::Node::initMPIDatatypes().
|
static |
Definition at line 240 of file TreeManagementMessage.cpp.
References _senderDestinationRank.
Referenced by peano4::parallel::SpacetreeSet::addSpacetree(), peano4::parallel::SpacetreeSet::cleanUpTrees(), receiveAndPollDanglingMessages(), peano4::parallel::SpacetreeSet::receiveDanglingMessages(), and peano4::parallel::tests::PingPongTest::testDaStGenArrayTreeManagementMessage().
|
static |
Definition at line 267 of file TreeManagementMessage.cpp.
References _senderDestinationRank.
|
static |
Definition at line 307 of file TreeManagementMessage.cpp.
References tarch::mpi::Rank::getInstance(), tarch::services::ServiceRepository::getInstance(), receive(), tarch::services::ServiceRepository::receiveDanglingMessages(), tarch::mpi::Rank::setDeadlockTimeOutTimeStamp(), tarch::mpi::Rank::setDeadlockWarningTimeStamp(), tarch::mpi::Rank::triggerDeadlockTimeOut(), and tarch::mpi::Rank::writeTimeOutWarning().
Referenced by peano4::parallel::SpacetreeSet::split().
|
static |
In DaStGen (the first version), I had a non-static version of the send as well as the receive.
However, this did not work with newer C++11 versions, as a member function using this as pointer usually doesn't see the vtable while the init sees the object from outside, i.e. including a vtable. So this routine now is basically an alias for a blocking MPI_Send.
Definition at line 235 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::SpacetreeSet::answerQuestions(), peano4::parallel::SpacetreeSet::cleanUpTrees(), sendAndPollDanglingMessages(), and peano4::parallel::tests::PingPongTest::testDaStGenArrayTreeManagementMessage().
|
static |
Alternative to the other send() where I trigger a non-blocking send an then invoke the functor until the corresponding MPI_Test tells me that the message went through.
In systems with heavy MPI usage, this can help to avoid deadlocks.
Definition at line 247 of file TreeManagementMessage.cpp.
|
static |
Definition at line 290 of file TreeManagementMessage.cpp.
References tarch::mpi::Rank::getInstance(), tarch::services::ServiceRepository::getInstance(), tarch::services::ServiceRepository::receiveDanglingMessages(), send(), tarch::mpi::Rank::setDeadlockTimeOutTimeStamp(), tarch::mpi::Rank::setDeadlockWarningTimeStamp(), tarch::mpi::Rank::triggerDeadlockTimeOut(), and tarch::mpi::Rank::writeTimeOutWarning().
Referenced by peano4::parallel::SpacetreeSet::addSpacetree(), and peano4::parallel::SpacetreeSet::split().
Definition at line 59 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::SpacetreeSet::addSpacetree(), peano4::parallel::SpacetreeSet::answerQuestions(), peano4::parallel::SpacetreeSet::split(), peano4::parallel::tests::PingPongTest::testDaStGenArrayTreeManagementMessage(), and TreeManagementMessage().
Definition at line 39 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::SpacetreeSet::addSpacetree(), peano4::parallel::SpacetreeSet::split(), and TreeManagementMessage().
Definition at line 49 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::SpacetreeSet::addSpacetree(), peano4::parallel::SpacetreeSet::answerQuestions(), peano4::parallel::SpacetreeSet::split(), and TreeManagementMessage().
|
static |
Free the underlying MPI datatype.
Definition at line 221 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::Node::shutdownMPIDatatypes().
std::string peano4::parallel::TreeManagementMessage::toString | ( | ) | const |
Definition at line 18 of file TreeManagementMessage.cpp.
Referenced by peano4::parallel::SpacetreeSet::addSpacetree(), peano4::parallel::SpacetreeSet::cleanUpTrees(), peano4::parallel::SpacetreeSet::receiveDanglingMessages(), peano4::parallel::SpacetreeSet::split(), and peano4::parallel::tests::PingPongTest::testDaStGenArrayTreeManagementMessage().
|
private |
Definition at line 137 of file TreeManagementMessage.h.
|
private |
Definition at line 135 of file TreeManagementMessage.h.
|
private |
Definition at line 141 of file TreeManagementMessage.h.
|
private |
Definition at line 136 of file TreeManagementMessage.h.
|
staticprivate |
Whenever we use LLVM's MPI extension (DaStGe), we rely on lazy initialisation of the datatype.
However, Peano calls init explicitly in most cases. Without the LLVM extension which caches the MPI datatype once constructed, this field stores the type.
Definition at line 150 of file TreeManagementMessage.h.