Peano
Loading...
Searching...
No Matches
tarch::mpi::IntegerMessage Struct Reference

#include <IntegerMessage.h>

Public Types

enum  ObjectConstruction { NoData }
 

Public Member Functions

 IntegerMessage ()
 
 IntegerMessage (int __value)
 
int getValue () const
 
void setValue (int value)
 
 IntegerMessage (const IntegerMessage &copy)=default
 
int getSenderRank () const
 
 IntegerMessage (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 tarch::mpi::IntegerMessage &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 (tarch::mpi::IntegerMessage &buffer, int source, int tag, MPI_Comm communicator)
 
static void send (const tarch::mpi::IntegerMessage &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 (tarch::mpi::IntegerMessage &buffer, int source, int tag, std::function< void()> startCommunicationFunctor, std::function< void()> waitFunctor, MPI_Comm communicator)
 
static void sendAndPollDanglingMessages (const tarch::mpi::IntegerMessage &message, int destination, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator())
 
static void receiveAndPollDanglingMessages (tarch::mpi::IntegerMessage &message, int source, int tag, MPI_Comm communicator=tarch::mpi::Rank::getInstance().getCommunicator())
 

Private Attributes

int _value
 
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.
 

Detailed Description

Definition at line 33 of file IntegerMessage.h.

Member Enumeration Documentation

◆ ObjectConstruction

Enumerator
NoData 

Definition at line 121 of file IntegerMessage.h.

Constructor & Destructor Documentation

◆ IntegerMessage() [1/4]

tarch::mpi::IntegerMessage::IntegerMessage ( )

Definition at line 37 of file IntegerMessage.h.

◆ IntegerMessage() [2/4]

tarch::mpi::IntegerMessage::IntegerMessage ( int __value)

Definition at line 10 of file IntegerMessage.cpp.

References setValue().

Here is the call graph for this function:

◆ IntegerMessage() [3/4]

tarch::mpi::IntegerMessage::IntegerMessage ( const IntegerMessage & copy)
default

◆ IntegerMessage() [4/4]

tarch::mpi::IntegerMessage::IntegerMessage ( ObjectConstruction )

Definition at line 125 of file IntegerMessage.h.

Member Function Documentation

◆ freeBoundaryExchangeDatatype()

void tarch::mpi::IntegerMessage::freeBoundaryExchangeDatatype ( )
static

Definition at line 107 of file IntegerMessage.cpp.

◆ freeForkDatatype()

void tarch::mpi::IntegerMessage::freeForkDatatype ( )
static

Definition at line 80 of file IntegerMessage.cpp.

◆ freeGlobalCommunciationDatatype()

void tarch::mpi::IntegerMessage::freeGlobalCommunciationDatatype ( )
static

Definition at line 89 of file IntegerMessage.cpp.

◆ freeJoinDatatype()

void tarch::mpi::IntegerMessage::freeJoinDatatype ( )
static

Definition at line 98 of file IntegerMessage.cpp.

◆ freeMultiscaleDataExchangeDatatype()

void tarch::mpi::IntegerMessage::freeMultiscaleDataExchangeDatatype ( )
static

Definition at line 116 of file IntegerMessage.cpp.

◆ getBoundaryExchangeDatatype()

MPI_Datatype tarch::mpi::IntegerMessage::getBoundaryExchangeDatatype ( )
static

Definition at line 68 of file IntegerMessage.cpp.

◆ getForkDatatype()

MPI_Datatype tarch::mpi::IntegerMessage::getForkDatatype ( )
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 50 of file IntegerMessage.cpp.

◆ getGlobalCommunciationDatatype()

MPI_Datatype tarch::mpi::IntegerMessage::getGlobalCommunciationDatatype ( )
static

Definition at line 56 of file IntegerMessage.cpp.

Referenced by peano4::parallel::tests::PingPongTest::testDaStGenTypeIntegerMessage().

Here is the caller graph for this function:

◆ getJoinDatatype()

MPI_Datatype tarch::mpi::IntegerMessage::getJoinDatatype ( )
static

Definition at line 62 of file IntegerMessage.cpp.

◆ getMultiscaleDataExchangeDatatype()

MPI_Datatype tarch::mpi::IntegerMessage::getMultiscaleDataExchangeDatatype ( )
static

Definition at line 74 of file IntegerMessage.cpp.

◆ getSenderRank()

int tarch::mpi::IntegerMessage::getSenderRank ( ) const
Returns
The rank of the sender of an object. It only make ssense to call this routine after you've invoked receive with MPI_ANY_SOURCE.

Definition at line 124 of file IntegerMessage.cpp.

◆ getValue()

◆ initDatatype()

void tarch::mpi::IntegerMessage::initDatatype ( )
static

Wrapper around getDatatype() to trigger lazy evaluation if we use the lazy initialisation.

Definition at line 129 of file IntegerMessage.cpp.

Referenced by tarch::mpi::Rank::init().

Here is the caller graph for this function:

◆ receive() [1/2]

void tarch::mpi::IntegerMessage::receive ( tarch::mpi::IntegerMessage & buffer,
int source,
int tag,
MPI_Comm communicator )
static

◆ receive() [2/2]

void tarch::mpi::IntegerMessage::receive ( tarch::mpi::IntegerMessage & buffer,
int source,
int tag,
std::function< void()> startCommunicationFunctor,
std::function< void()> waitFunctor,
MPI_Comm communicator )
static

Definition at line 229 of file IntegerMessage.cpp.

References _senderDestinationRank.

◆ receiveAndPollDanglingMessages()

◆ send() [1/2]

void tarch::mpi::IntegerMessage::send ( const tarch::mpi::IntegerMessage & buffer,
int destination,
int tag,
MPI_Comm communicator )
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 197 of file IntegerMessage.cpp.

Referenced by sendAndPollDanglingMessages(), peano4::parallel::SpacetreeSet::streamDataFromSplittingTreeToNewTree(), peano4::parallel::tests::PingPongTest::testDaStGenTypeIntegerMessage(), and tarch::triggerNonCriticalAssertion().

Here is the caller graph for this function:

◆ send() [2/2]

void tarch::mpi::IntegerMessage::send ( const tarch::mpi::IntegerMessage & buffer,
int destination,
int tag,
std::function< void()> startCommunicationFunctor,
std::function< void()> waitFunctor,
MPI_Comm communicator )
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 209 of file IntegerMessage.cpp.

◆ sendAndPollDanglingMessages()

◆ setValue()

void tarch::mpi::IntegerMessage::setValue ( int value)

Definition at line 33 of file IntegerMessage.cpp.

Referenced by IntegerMessage(), and peano4::parallel::tests::PingPongTest::testDaStGenTypeIntegerMessage().

Here is the caller graph for this function:

◆ shutdownDatatype()

void tarch::mpi::IntegerMessage::shutdownDatatype ( )
static

Free the underlying MPI datatype.

Definition at line 183 of file IntegerMessage.cpp.

Referenced by tarch::mpi::Rank::shutdown().

Here is the caller graph for this function:

◆ toString()

std::string tarch::mpi::IntegerMessage::toString ( ) const

Definition at line 16 of file IntegerMessage.cpp.

Referenced by peano4::parallel::tests::PingPongTest::testDaStGenTypeIntegerMessage().

Here is the caller graph for this function:

Field Documentation

◆ _senderDestinationRank

int tarch::mpi::IntegerMessage::_senderDestinationRank
private

Definition at line 143 of file IntegerMessage.h.

Referenced by receive(), and receive().

◆ _value

int tarch::mpi::IntegerMessage::_value
private

Definition at line 137 of file IntegerMessage.h.

◆ Datatype

MPI_Datatype tarch::mpi::IntegerMessage::Datatype = MPI_DATATYPE_NULL
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 152 of file IntegerMessage.h.


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