Communicator object for MPI communications. More...
#include <paraCommMpi.h>
Public Member Functions | |
| ParaCommMpi () | |
| default constructor of ParaCommMpi More... | |
| ParaCommMpi (MPI_Comm comm) | |
| constructor of ParaCommMpi with MPI communicator More... | |
| virtual | ~ParaCommMpi () |
| destructor of this communicator More... | |
| MPI_Comm & | getMpiComm () |
| getter of MPI_Comm More... | |
| virtual void | init (int argc, char **argv) |
| initializer of this communicator More... | |
| double | getStartTime () |
| get start time of this communicator More... | |
| int | getRank () |
| get rank of caller's thread More... | |
| int | getSize () |
| get size of this communicator, which indicates how many threads in a UG process More... | |
| int | getNumOfMessagesWaitingToSend (int dest=-1) |
| get size of the messageQueueTable More... | |
| void | lcInit (ParaParamSet *paraParamSet) |
| initializer for LoadCoordinator More... | |
| void | solverInit (ParaParamSet *paraParamSet) |
| initializer for Solvers More... | |
| void | abort () |
| abort. How it works sometimes depends on communicator used More... | |
| virtual bool | waitTerminatedMessage () |
| function to wait Terminated message (This function is not used currently) More... | |
| virtual bool | waitToken (int rank) |
| wait token when UG runs with deterministic mode More... | |
| virtual void | passToken (int rank) |
| pass token to from the rank to the next More... | |
| virtual bool | passTermToken (int rank) |
| pass termination token from the rank to the next More... | |
| virtual void | setToken (int rank, int *inToken) |
| set received token to this communicator More... | |
| virtual void | lockApp () |
| lock UG application to synchronize with other threads More... | |
| virtual void | unlockApp () |
| unlock UG application to synchronize with other threads More... | |
| ParaTimer * | createParaTimer () |
| create ParaTimer object More... | |
| int | bcast (void *buffer, int count, const int datatypeId, int root) |
| broadcast function for standard ParaData types More... | |
| virtual int | send (void *bufer, int count, const int datatypeId, int dest, const int tag) |
| send function for standard ParaData types More... | |
| int | iSend (void *bufer, int count, const int datatypeId, int dest, const int tag, MPI_Request *req) |
| send function for standard ParaData types More... | |
| int | receive (void *bufer, int count, const int datatypeId, int source, const int tag) |
| receive function for standard ParaData types More... | |
| void | waitSpecTagFromSpecSource (const int source, const int tag, int *receivedTag) |
| wait function for a specific tag from a specific source coming from More... | |
| bool | probe (int *source, int *tag) |
| probe function which waits a new message More... | |
| bool | iProbe (int *source, int *tag) |
| iProbe function which checks if a new message is arrived or not More... | |
| int | ubcast (void *buffer, int count, MPI_Datatype datatype, int root) |
| User type bcast for created data type. More... | |
| int | usend (void *bufer, int count, MPI_Datatype datatype, int dest, int tag) |
| User type send for created data type. More... | |
| int | iUsend (void *bufer, int count, MPI_Datatype datatype, int dest, int tag, MPI_Request *req) |
| User type send for created data type. More... | |
| int | ureceive (void *bufer, int count, MPI_Datatype datatype, int source, int tag) |
| User type receive for created data type. More... | |
| int | testAllIsends () |
| void | waitAllIsends () |
| virtual const char * | getTagString (int tag) |
| get Tag string for debugging More... | |
| virtual void | lockApp ()=0 |
| lock UG application to synchronize with other threads More... | |
| virtual void | lockApp (char const *f, int l) |
| lock UG application to synchronize with other threads (for debug) More... | |
| virtual void | unlockApp ()=0 |
| unlock UG application to synchronize with other threads More... | |
| virtual void | unlockApp (char const *f, int l) |
| unlock UG application to synchronize with other threads (for debug) More... | |
Public Member Functions inherited from ParaComm | |
| ParaComm () | |
| default constructor of ParaComm More... | |
| virtual | ~ParaComm () |
| destructor of ParaComm More... | |
| virtual void | init (int argc, char **argv)=0 |
| initializer of this object More... | |
| virtual int | getRank ()=0 |
| get rank of this process or this thread depending on run-time environment More... | |
| virtual int | getSize ()=0 |
| get number of UG processes or UG threads depending on run-time environment More... | |
| virtual int | getNumOfMessagesWaitingToSend (int dest)=0 |
| get size of the messageQueueTable More... | |
| virtual void | lcInit (ParaParamSet *paraParamSet)=0 |
| special initializer when this object is used in LoadCoordinator More... | |
| virtual void | solverInit (ParaParamSet *paraParamSet)=0 |
| special initializer when this object is used in Solver More... | |
| virtual void | setLocalRank (int inRank) |
| virtual void | abort ()=0 |
| abort function for this communicator (how to abort depends on which library used for communication) More... | |
| virtual bool | waitTerminatedMessage ()=0 |
| function to wait Terminated message (This function is not used currently) More... | |
| virtual bool | waitToken (int rank) |
| wait token when UG runs with deterministic mode More... | |
| virtual void | passToken (int rank) |
| pass token to from the rank to the next More... | |
| virtual bool | passTermToken (int rank) |
| pass termination token from the rank to the next More... | |
| virtual void | setToken (int rank, int *token) |
| set received token to this communicator More... | |
| virtual void | lockApp ()=0 |
| lock UG application to synchronize with other threads More... | |
| virtual void | lockApp (char const *f, int l) |
| lock UG application to synchronize with other threads (for debug) More... | |
| virtual void | unlockApp ()=0 |
| unlock UG application to synchronize with other threads More... | |
| virtual void | unlockApp (char const *f, int l) |
| unlock UG application to synchronize with other threads (for debug) More... | |
| virtual ParaCalculationState * | createParaCalculationState ()=0 |
| transfer object factory More... | |
| virtual ParaRacingRampUpParamSet * | createParaRacingRampUpParamSet ()=0 |
| create ParaRacingRampUpParamSet object More... | |
| virtual ParaTask * | createParaTask ()=0 |
| create ParaTask object by default constructor More... | |
| virtual ParaParamSet * | createParaParamSet ()=0 |
| create ParaParamSet object More... | |
| virtual ParaSolverState * | createParaSolverState ()=0 |
| create ParaSolverState object by default constructor More... | |
| virtual ParaSolverTerminationState * | createParaSolverTerminationState ()=0 |
| create ParaSolverTerminationState object by default constructor More... | |
| virtual ParaTimer * | createParaTimer ()=0 |
| create ParaTimer object More... | |
| virtual ParaInstance * | createParaInstance ()=0 |
| create ParaInstance object by default constructor More... | |
| virtual ParaSolution * | createParaSolution ()=0 |
| create ParaSolution object by default constructor More... | |
| virtual ParaDiffSubproblem * | createParaDiffSubproblem () |
| create ParaDiffSubproblem object by default constructor More... | |
| virtual int | bcast (void *buffer, int count, const int datatypeId, int root)=0 |
| Some action need to be taken for fault tolerant, when the functions return. So, they rerun status value. More... | |
| virtual int | send (void *bufer, int count, const int datatypeId, int dest, const int tag)=0 |
| send function for standard ParaData types More... | |
| virtual int | receive (void *bufer, int count, const int datatypeId, int source, const int tag)=0 |
| receive function for standard ParaData types More... | |
| virtual void | waitSpecTagFromSpecSource (const int source, const int tag, int *receivedTag)=0 |
| wait function for a specific tag from a specific source coming from More... | |
| virtual bool | probe (int *source, int *tag)=0 |
| No need to take action for fault tolerant, when the functions return. So, they do not rerun status value. More... | |
| virtual bool | iProbe (int *source, int *tag)=0 |
| iProbe function which checks if a new message is arrived or not More... | |
| virtual const char * | getTagString (int tag)=0 |
| get Tag string for debugging More... | |
Public Attributes | |
| std::deque< ParaIsendRequest * > | iSendRequestDeque |
Protected Member Functions | |
| virtual bool | tagStringTableIsSetUpCoorectly () |
| check if tag string table (for debugging) set up correctly More... | |
Protected Attributes | |
| MPI_Comm | myComm |
| MPI communicator. More... | |
| int | myCommSize |
| communicator size : number of processes joined in this system More... | |
| int | myRank |
| rank of this process More... | |
| int | namelen |
| length of this process name More... | |
| char | procName [MPI_MAX_PROCESSOR_NAME] |
| process name More... | |
| bool | tagTraceFlag |
| indicate if tags are traced or not More... | |
| std::ofstream | ofs |
| output file stream for tag trace More... | |
| std::ostream * | tos |
| output file stream for tag trace to change file name More... | |
| double | startTime |
| start time of this communicator More... | |
| int | token [2] |
| index 0: token index 1: token color -1: green > 0: yellow ( termination origin solver number ) -2: red ( means the solver can terminate ) More... | |
| pthread_mutex_t | tokenAccessLock |
| mutex for pthread thread More... | |
| std::mutex | applicationLockMutex |
| mutex for applications More... | |
Static Protected Attributes | |
| static MPI_Datatype | datatypes [TYPE_LIST_SIZE] |
| data type mapping table to MPI data type More... | |
| static const char * | tagStringTable [] |
| table for tag name string More... | |
Communicator object for MPI communications.
Definition at line 93 of file paraCommMpi.h.
| ParaCommMpi | ( | ) |
default constructor of ParaCommMpi
Definition at line 138 of file paraCommMpi.h.
References ParaCommMpi::token, and ParaCommMpi::tokenAccessLock.
| ParaCommMpi | ( | MPI_Comm | comm | ) |
constructor of ParaCommMpi with MPI communicator
| comm | my communicator |
Definition at line 161 of file paraCommMpi.h.
|
virtual |
destructor of this communicator
Definition at line 316 of file paraCommMpi.cpp.
|
virtual |
abort. How it works sometimes depends on communicator used
Implements ParaComm.
Definition at line 118 of file paraCommMpi.cpp.
|
virtual |
broadcast function for standard ParaData types
| buffer | point to the head of sending message |
| count | the number of data in the message |
| datatypeId | data type in the message |
| root | root rank for broadcasting |
Implements ParaComm.
Definition at line 338 of file paraCommMpi.cpp.
References ParaCommMpi::datatypes, MPI_CALL, and ParaCommMpi::myComm.
|
virtual |
create ParaTimer object
Implements ParaComm.
Definition at line 340 of file paraCommMpi.h.
| MPI_Comm & getMpiComm | ( | ) |
|
virtual |
get size of the messageQueueTable
Implements ParaComm.
Definition at line 233 of file paraCommMpi.h.
References ParaCommMpi::iSendRequestDeque.
|
virtual |
get rank of caller's thread
Implements ParaComm.
Definition at line 213 of file paraCommMpi.h.
References ParaCommMpi::myRank.
Referenced by ParaCommMpi::passTermToken().
|
virtual |
get size of this communicator, which indicates how many threads in a UG process
Implements ParaComm.
Definition at line 223 of file paraCommMpi.h.
References ParaCommMpi::myCommSize.
| double getStartTime | ( | ) |
get start time of this communicator
Definition at line 203 of file paraCommMpi.h.
References ParaCommMpi::startTime.
|
virtual |
get Tag string for debugging
| tag | tag to be converted to string |
Implements ParaComm.
Reimplemented in BbParaCommMpi, and ScipParaCommMpi.
Definition at line 329 of file paraCommMpi.cpp.
References UG::N_MPI_TAGS, and ParaCommMpi::tagStringTable.
Referenced by BbParaCommMpi::getTagString().
|
virtual |
initializer of this communicator
MPI call wrappers */.
if you add tag, you should add tagStringTale too */
Data Types */
| argc | the number of arguments |
| argv | pointers to the arguments |
Implements ParaComm.
Reimplemented in ScipParaCommMpi.
Definition at line 235 of file paraCommMpi.cpp.
References ParaCommMpi::datatypes, MPI_CALL, ParaCommMpi::namelen, UG::ParaBOOL, UG::ParaBYTE, UG::ParaCHAR, UG::ParaDOUBLE, UG::ParaFLOAT, UG::ParaINT, UG::ParaLONG, UG::ParaLONG_DOUBLE, UG::ParaLONG_LONG, UG::ParaSHORT, UG::ParaSIGNED_CHAR, UG::ParaUNSIGNED, UG::ParaUNSIGNED_CHAR, UG::ParaUNSIGNED_LONG, UG::ParaUNSIGNED_LONG_LONG, UG::ParaUNSIGNED_SHORT, ParaCommMpi::procName, ParaCommMpi::startTime, and ParaCommMpi::tagStringTableIsSetUpCoorectly().
Referenced by ScipParaCommMpi::init().
|
virtual |
iProbe function which checks if a new message is arrived or not
| source | source rank of the message arrived |
| tag | tag of the message arrived |
Implements ParaComm.
Definition at line 453 of file paraCommMpi.cpp.
References MPI_CALL, ParaCommMpi::myComm, TAG_TRACE, and UG::TagAny.
| int iSend | ( | void * | bufer, |
| int | count, | ||
| const int | datatypeId, | ||
| int | dest, | ||
| const int | tag, | ||
| MPI_Request * | req | ||
| ) |
send function for standard ParaData types
| bufer | point to the head of sending message |
| count | the number of data in the message |
| datatypeId | data type in the message |
| dest | destination to send the message |
| tag | tag of this message |
| req | point to MPI_Request |
Definition at line 368 of file paraCommMpi.cpp.
References ParaCommMpi::datatypes, ParaCommMpi::iSend(), MPI_CALL, ParaCommMpi::myComm, and TAG_TRACE.
Referenced by ParaCommMpi::iSend(), and ParaCommMpi::iUsend().
| int iUsend | ( | void * | bufer, |
| int | count, | ||
| MPI_Datatype | datatype, | ||
| int | dest, | ||
| int | tag, | ||
| MPI_Request * | req | ||
| ) |
User type send for created data type.
| bufer | point to the head of sending message |
| count | the number of created data type |
| datatype | created data type |
| dest | destination rank |
| tag | tag of the message |
| req | point to MPI_Request |
Definition at line 514 of file paraCommMpi.cpp.
References ParaCommMpi::iSend(), MPI_CALL, ParaCommMpi::myComm, and TAG_TRACE.
|
virtual |
initializer for LoadCoordinator
| paraParamSet | UG parameter set |
Implements ParaComm.
Definition at line 69 of file paraCommMpi.cpp.
References UG::Deterministic, ParaCommMpi::myRank, ParaCommMpi::ofs, paraParamSet, UG::TagTrace, UG::TagTraceFileName, ParaCommMpi::tagTraceFlag, ParaCommMpi::token, and ParaCommMpi::tos.
|
virtual |
lock UG application to synchronize with other threads
Implements ParaComm.
Definition at line 320 of file paraCommMpi.h.
References ParaCommMpi::applicationLockMutex.
|
virtual |
|
virtual |
lock UG application to synchronize with other threads (for debug)
| f | string to indicate what is locked |
| l | a number to show something |
Reimplemented from ParaComm.
Definition at line 238 of file paraComm.h.
|
virtual |
pass termination token from the rank to the next
Reimplemented from ParaComm.
Definition at line 197 of file paraCommMpi.cpp.
References ParaCommMpi::getRank(), ParaCommMpi::myCommSize, ParaCommMpi::myRank, UG::ParaINT, ParaCommMpi::send(), UG::TagToken, THROW_LOGICAL_ERROR4, ParaCommMpi::token, and ParaCommMpi::tokenAccessLock.
|
virtual |
pass token to from the rank to the next
| rank | from this rank, the token is passed |
Reimplemented from ParaComm.
Definition at line 178 of file paraCommMpi.cpp.
References ParaCommMpi::myCommSize, ParaCommMpi::myRank, UG::ParaINT, ParaCommMpi::send(), UG::TagToken, ParaCommMpi::token, and ParaCommMpi::tokenAccessLock.
|
virtual |
probe function which waits a new message
| source | source rank of the message arrived |
| tag | tag of the message arrived |
Implements ParaComm.
Definition at line 437 of file paraCommMpi.cpp.
References MPI_CALL, ParaCommMpi::myComm, and TAG_TRACE.
|
virtual |
receive function for standard ParaData types
| bufer | point to the head of receiving message |
| count | the number of data in the message |
| datatypeId | data type in the message |
| source | source of the message coming from |
| tag | tag of the message |
Implements ParaComm.
Definition at line 385 of file paraCommMpi.cpp.
References ParaCommMpi::datatypes, MPI_CALL, ParaCommMpi::myComm, and TAG_TRACE.
Referenced by ParaCommMpi::waitToken().
|
virtual |
send function for standard ParaData types
| bufer | point to the head of sending message |
| count | the number of data in the message |
| datatypeId | data type in the message |
| dest | destination to send the message |
| tag | tag of this message |
Implements ParaComm.
Definition at line 352 of file paraCommMpi.cpp.
References ParaCommMpi::datatypes, MPI_CALL, ParaCommMpi::myComm, and TAG_TRACE.
Referenced by ParaCommMpi::passTermToken(), and ParaCommMpi::passToken().
|
virtual |
set received token to this communicator
| rank | rank to set the token |
| inToken | token to be set |
Reimplemented from ParaComm.
Definition at line 297 of file paraCommMpi.h.
References ParaCommMpi::token, and ParaCommMpi::tokenAccessLock.
|
virtual |
initializer for Solvers
| paraParamSet | UG parameter set |
Implements ParaComm.
Definition at line 96 of file paraCommMpi.cpp.
References ParaCommMpi::myRank, ParaCommMpi::ofs, paraParamSet, UG::TagTrace, UG::TagTraceFileName, ParaCommMpi::tagTraceFlag, and ParaCommMpi::tos.
|
protectedvirtual |
check if tag string table (for debugging) set up correctly
Reimplemented in BbParaCommMpi, and ScipParaCommMpi.
Definition at line 322 of file paraCommMpi.cpp.
References UG::N_MPI_TAGS, and ParaCommMpi::tagStringTable.
Referenced by ParaCommMpi::init().
| int testAllIsends | ( | ) |
Definition at line 549 of file paraCommMpi.cpp.
References ParaCommMpi::iSendRequestDeque, and ParaIsendRequest::test().
| int ubcast | ( | void * | buffer, |
| int | count, | ||
| MPI_Datatype | datatype, | ||
| int | root | ||
| ) |
User type bcast for created data type.
| buffer | point to the head of sending message |
| count | the number of created data type |
| datatype | MPI data type |
| root | root rank for brodcasting |
Definition at line 483 of file paraCommMpi.cpp.
References MPI_CALL, and ParaCommMpi::myComm.
|
virtual |
unlock UG application to synchronize with other threads
Implements ParaComm.
Definition at line 330 of file paraCommMpi.h.
References ParaCommMpi::applicationLockMutex.
|
virtual |
|
virtual |
unlock UG application to synchronize with other threads (for debug)
| f | string to indicate what is locked |
| l | a number to show something |
Reimplemented from ParaComm.
Definition at line 253 of file paraComm.h.
| int ureceive | ( | void * | bufer, |
| int | count, | ||
| MPI_Datatype | datatype, | ||
| int | source, | ||
| int | tag | ||
| ) |
User type receive for created data type.
| bufer | point to the head of receiving message |
| count | the number of created data type |
| datatype | created data type |
| source | source rank |
| tag | tag of the message |
Definition at line 532 of file paraCommMpi.cpp.
References MPI_CALL, ParaCommMpi::myComm, and TAG_TRACE.
| int usend | ( | void * | bufer, |
| int | count, | ||
| MPI_Datatype | datatype, | ||
| int | dest, | ||
| int | tag | ||
| ) |
User type send for created data type.
| bufer | point to the head of sending message |
| count | the number of created data type |
| datatype | created data type |
| dest | destination rank |
| tag | tag of the message |
Definition at line 497 of file paraCommMpi.cpp.
References MPI_CALL, ParaCommMpi::myComm, and TAG_TRACE.
| void waitAllIsends | ( | ) |
Definition at line 573 of file paraCommMpi.cpp.
References ParaCommMpi::iSendRequestDeque, and ParaIsendRequest::wait().
|
virtual |
wait function for a specific tag from a specific source coming from
| source | source rank which the message should come from |
| tag | tag which the message should wait |
| receivedTag | tag of the message which is arrived |
Implements ParaComm.
Definition at line 402 of file paraCommMpi.cpp.
References MPI_CALL, ParaCommMpi::myComm, TAG_TRACE, and UG::TagAny.
|
virtual |
function to wait Terminated message (This function is not used currently)
Implements ParaComm.
Definition at line 265 of file paraCommMpi.h.
|
virtual |
wait token when UG runs with deterministic mode
| rank | rank to check if token is arrived |
Reimplemented from ParaComm.
Definition at line 125 of file paraCommMpi.cpp.
References MPI_CALL, ParaCommMpi::myComm, ParaCommMpi::myCommSize, ParaCommMpi::myRank, UG::ParaINT, ParaCommMpi::receive(), TAG_TRACE, UG::TagToken, ParaCommMpi::token, and ParaCommMpi::tokenAccessLock.
|
protected |
mutex for applications
Definition at line 118 of file paraCommMpi.h.
Referenced by ParaCommMpi::lockApp(), and ParaCommMpi::unlockApp().
|
staticprotected |
data type mapping table to MPI data type
Definition at line 110 of file paraCommMpi.h.
Referenced by ParaCommMpi::bcast(), ParaCommMpi::init(), ParaCommMpi::iSend(), ParaCommMpi::receive(), and ParaCommMpi::send().
| std::deque<ParaIsendRequest *> iSendRequestDeque |
Definition at line 133 of file paraCommMpi.h.
Referenced by ParaCommMpi::getNumOfMessagesWaitingToSend(), ParaCommMpi::testAllIsends(), and ParaCommMpi::waitAllIsends().
|
protected |
MPI communicator.
Definition at line 96 of file paraCommMpi.h.
Referenced by ParaCommMpi::bcast(), ParaCommMpi::getMpiComm(), ScipParaCommMpi::init(), ParaCommMpi::iProbe(), ParaCommMpi::iSend(), ParaCommMpi::iUsend(), ParaCommMpi::probe(), ParaCommMpi::receive(), ParaCommMpi::send(), ParaCommMpi::ubcast(), ParaCommMpi::ureceive(), ParaCommMpi::usend(), ParaCommMpi::waitSpecTagFromSpecSource(), and ParaCommMpi::waitToken().
|
protected |
communicator size : number of processes joined in this system
Definition at line 97 of file paraCommMpi.h.
Referenced by ParaCommMpi::getSize(), ScipParaCommMpi::init(), ParaCommMpi::passTermToken(), ParaCommMpi::passToken(), and ParaCommMpi::waitToken().
|
protected |
rank of this process
Definition at line 98 of file paraCommMpi.h.
Referenced by ParaCommMpi::getRank(), ScipParaCommMpi::init(), ParaCommMpi::lcInit(), ParaCommMpi::passTermToken(), ParaCommMpi::passToken(), ParaCommMpi::solverInit(), and ParaCommMpi::waitToken().
|
protected |
length of this process name
Definition at line 99 of file paraCommMpi.h.
Referenced by ParaCommMpi::init().
|
protected |
output file stream for tag trace
Definition at line 102 of file paraCommMpi.h.
Referenced by ParaCommMpi::lcInit(), and ParaCommMpi::solverInit().
|
protected |
|
protected |
start time of this communicator
Definition at line 104 of file paraCommMpi.h.
Referenced by ParaCommMpi::getStartTime(), and ParaCommMpi::init().
|
staticprotected |
table for tag name string
Definition at line 111 of file paraCommMpi.h.
Referenced by ParaCommMpi::getTagString(), and ParaCommMpi::tagStringTableIsSetUpCoorectly().
|
protected |
indicate if tags are traced or not
Definition at line 101 of file paraCommMpi.h.
Referenced by ParaCommMpi::lcInit(), and ParaCommMpi::solverInit().
|
protected |
index 0: token index 1: token color -1: green > 0: yellow ( termination origin solver number ) -2: red ( means the solver can terminate )
Definition at line 105 of file paraCommMpi.h.
Referenced by BbParaCommMpi::BbParaCommMpi(), ParaCommMpi::lcInit(), ParaCommMpi::ParaCommMpi(), ParaCommMpi::passTermToken(), ParaCommMpi::passToken(), ParaCommMpi::setToken(), and ParaCommMpi::waitToken().
|
protected |
mutex for pthread thread
Definition at line 116 of file paraCommMpi.h.
Referenced by ParaCommMpi::ParaCommMpi(), ParaCommMpi::passTermToken(), ParaCommMpi::passToken(), ParaCommMpi::setToken(), and ParaCommMpi::waitToken().
|
protected |
output file stream for tag trace to change file name
Definition at line 103 of file paraCommMpi.h.
Referenced by ParaCommMpi::lcInit(), and ParaCommMpi::solverInit().