Scippy

UG

Ubiquity Generator framework

BbParaCommMpi Class Reference

Communicator object for MPI communications. More...

#include <bbParaCommMpi.h>

Inheritance diagram for BbParaCommMpi:
ParaCommMpi ParaComm ScipParaCommMpi

Public Member Functions

 BbParaCommMpi ()
 default constructor of ParaCommMpi More...
 
 BbParaCommMpi (MPI_Comm comm)
 constructor of ParaCommMpi with MPI communicator More...
 
virtual ~BbParaCommMpi ()
 destructor of this communicator More...
 
virtual ParaCalculationStatecreateParaCalculationState ()
 create ParaCalculationState object by default constructor More...
 
virtual ParaCalculationStatecreateParaCalculationState (double compTime, double rootTime, int nSolved, int nSent, int nImprovedIncumbent, int terminationState, int nSolvedWithNoPreprocesses, int nSimplexIterRoot, double averageSimplexIter, int nTransferredLocalCuts, int minTransferredLocalCuts, int maxTransferredLocalCuts, int nTransferredBendersCuts, int minTransferredBendersCuts, int maxTransferredBendersCuts, int nRestarts, double minIisum, double maxIisum, int minNii, int maxNii, double dualBound, int nSelfSplitNodesLeft)
 create ParaCalculationState object More...
 
virtual ParaTaskcreateParaTask ()
 create ParaNode object by default constructor More...
 
virtual ParaTaskcreateParaNode (TaskId inNodeId, TaskId inGeneratorNodeId, int inDepth, double inDualBoundValue, double inOriginalDualBoundValue, double inEstimatedValue, ParaDiffSubproblem *inDiffSubproblem)
 create ParaNode object More...
 
virtual ParaSolverStatecreateParaSolverState ()
 create ParaSolverState object by default constructor More...
 
virtual ParaSolverStatecreateParaSolverState (int racingStage, unsigned int notificationId, int lcId, int globalSubtreeId, long long nodesSolved, int nodesLeft, double bestDualBoundValue, double globalBestPrimalBoundValue, double detTime, double averageDualBoundGain)
 create ParaSolverState object More...
 
virtual ParaSolverTerminationStatecreateParaSolverTerminationState ()
 create ParaSolverTerminationState object by default constructor More...
 
virtual ParaSolverTerminationStatecreateParaSolverTerminationState (int interrupted, int rank, int totalNSolved, int minNSolved, int maxNSolved, int totalNSent, int totalNImprovedIncumbent, int nParaNodesReceived, int nParaNodesSolved, int nParaNodesSolvedAtRoot, int nParaNodesSolvedAtPreCheck, int nTransferredLocalCutsFromSolver, int minTransferredLocalCutsFromSolver, int maxTransferredLocalCutsFromSolver, int nTransferredBendersCutsFromSolver, int minTransferredBendersCutsFromSolver, int maxTransferredBendersCutsFromSolver, int nTotalRestarts, int minRestarts, int maxRestarts, int nTightened, int nTightenedInt, int calcTerminationState, double runningTime, double idleTimeToFirstParaNode, double idleTimeBetweenParaNodes, double iddleTimeAfterLastParaNode, double idleTimeToWaitNotificationId, double idleTimeToWaitAckCompletion, double idleTimeToWaitToken, double totalRootNodeTime, double minRootNodeTime, double maxRootNodeTime, double detTime)
 create ParaSolverTerminationState object More...
 
virtual ParaRacingRampUpParamSetcreateParaRacingRampUpParamSet ()
 create ParaRacingRampUpParamSet object by default constructor More...
 
- Public Member Functions inherited from ParaCommMpi
 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...
 
ParaTimercreateParaTimer ()
 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 ParaCalculationStatecreateParaCalculationState ()=0
 transfer object factory More...
 
virtual ParaRacingRampUpParamSetcreateParaRacingRampUpParamSet ()=0
 create ParaRacingRampUpParamSet object More...
 
virtual ParaTaskcreateParaTask ()=0
 create ParaTask object by default constructor More...
 
virtual ParaParamSetcreateParaParamSet ()=0
 create ParaParamSet object More...
 
virtual ParaSolverStatecreateParaSolverState ()=0
 create ParaSolverState object by default constructor More...
 
virtual ParaSolverTerminationStatecreateParaSolverTerminationState ()=0
 create ParaSolverTerminationState object by default constructor More...
 
virtual ParaTimercreateParaTimer ()=0
 create ParaTimer object More...
 
virtual ParaInstancecreateParaInstance ()=0
 create ParaInstance object by default constructor More...
 
virtual ParaSolutioncreateParaSolution ()=0
 create ParaSolution object by default constructor More...
 
virtual ParaDiffSubproblemcreateParaDiffSubproblem ()
 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...
 

Protected Member Functions

virtual bool tagStringTableIsSetUpCoorectly ()
 check if tag string table (for debugging) set up correctly More...
 
virtual const char * getTagString (int tag)
 get Tag string for debugging More...
 
virtual bool tagStringTableIsSetUpCoorectly ()
 check if tag string table (for debugging) set up correctly More...
 

Protected Attributes

pthread_mutex_t tokenAccessLock
 mutex for pthread thread More...
 
- Protected Attributes inherited from ParaCommMpi
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...
 
- Static Protected Attributes inherited from ParaCommMpi
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...
 

Additional Inherited Members

- Public Attributes inherited from ParaCommMpi
std::deque< ParaIsendRequest * > iSendRequestDeque
 

Detailed Description

Communicator object for MPI communications.

Definition at line 76 of file bbParaCommMpi.h.

Constructor & Destructor Documentation

◆ BbParaCommMpi() [1/2]

default constructor of ParaCommMpi

Definition at line 112 of file bbParaCommMpi.h.

References ParaCommMpi::token, and BbParaCommMpi::tokenAccessLock.

◆ BbParaCommMpi() [2/2]

BbParaCommMpi ( MPI_Comm  comm)

constructor of ParaCommMpi with MPI communicator

Parameters
commmy communicator

Definition at line 129 of file bbParaCommMpi.h.

◆ ~BbParaCommMpi()

virtual ~BbParaCommMpi ( )
virtual

destructor of this communicator

Definition at line 142 of file bbParaCommMpi.h.

Member Function Documentation

◆ createParaCalculationState() [1/2]

ParaCalculationState * createParaCalculationState ( )
virtual

create ParaCalculationState object by default constructor

Returns
pointer to ParaCalculationState object

Implements ParaComm.

Definition at line 106 of file bbParaCommMpi.cpp.

◆ createParaCalculationState() [2/2]

ParaCalculationState * createParaCalculationState ( double  compTime,
double  rootTime,
int  nSolved,
int  nSent,
int  nImprovedIncumbent,
int  terminationState,
int  nSolvedWithNoPreprocesses,
int  nSimplexIterRoot,
double  averageSimplexIter,
int  nTransferredLocalCuts,
int  minTransferredLocalCuts,
int  maxTransferredLocalCuts,
int  nTransferredBendersCuts,
int  minTransferredBendersCuts,
int  maxTransferredBendersCuts,
int  nRestarts,
double  minIisum,
double  maxIisum,
int  minNii,
int  maxNii,
double  dualBound,
int  nSelfSplitNodesLeft 
)
virtual

create ParaCalculationState object

Returns
pointer to ParaCalculationState object
Parameters
compTimecomputation time of this ParaNode
rootTimecomputation time of the root node
nSolvedthe number of nodes solved
nSentthe number of ParaNodes sent
nImprovedIncumbentthe number of improved solution generated in this ParaSolver
terminationStateindicate whether if this computation is terminationState or not. 0: no, 1: terminationState
nSolvedWithNoPreprocessesnumber of nodes solved when it is solved with no preprocesses
nSimplexIterRootnumber of simplex iteration at root node
averageSimplexIteraverage number of simplex iteration except root node
nTransferredLocalCutsnumber of local cuts transferred from a ParaNode
minTransferredLocalCutsminimum number of local cuts transferred from a ParaNode
maxTransferredLocalCutsmaximum number of local cuts transferred from a ParaNode
nTransferredBendersCutsnumber of benders cuts transferred from a ParaNode
minTransferredBendersCutsminimum number of benders cuts transferred from a ParaNode
maxTransferredBendersCutsmaximum number of benders cuts transferred from a ParaNode
nRestartsnumber of restarts
minIisumminimum sum of integer infeasibility
maxIisummaximum sum of integer infeasibility
minNiiminimum number of integer infeasibility
maxNiimaximum number of integer infeasibility
dualBoundfinal dual bound value
nSelfSplitNodesLeftnumber of self-split nodes left

Definition at line 113 of file bbParaCommMpi.cpp.

◆ createParaNode()

ParaTask * createParaNode ( TaskId  inNodeId,
TaskId  inGeneratorNodeId,
int  inDepth,
double  inDualBoundValue,
double  inOriginalDualBoundValue,
double  inEstimatedValue,
ParaDiffSubproblem inDiffSubproblem 
)
virtual

create ParaNode object

Returns
pointer to ParaNode object
Parameters
inNodeIdnode id
inGeneratorNodeIdgenerator node id
inDepthnode depth in global search tree
inDualBoundValuedual bound value
inOriginalDualBoundValueoriginal dual bound value
inEstimatedValueestimated value
inDiffSubproblemdiff subproblem info. from the original problem

Definition at line 172 of file bbParaCommMpi.cpp.

◆ createParaRacingRampUpParamSet()

virtual ParaRacingRampUpParamSet * createParaRacingRampUpParamSet ( )
virtual

create ParaRacingRampUpParamSet object by default constructor

Returns
pointer to ParaRacingRampUpParamSet object

Implements ParaComm.

Reimplemented in ScipParaCommMpi.

Definition at line 281 of file bbParaCommMpi.h.

References THROW_LOGICAL_ERROR1.

◆ createParaSolverState() [1/2]

ParaSolverState * createParaSolverState ( )
virtual

create ParaSolverState object by default constructor

Returns
pointer to ParaSolverState object

Implements ParaComm.

Definition at line 194 of file bbParaCommMpi.cpp.

◆ createParaSolverState() [2/2]

ParaSolverState * createParaSolverState ( int  racingStage,
unsigned int  notificationId,
int  lcId,
int  globalSubtreeId,
long long  nodesSolved,
int  nodesLeft,
double  bestDualBoundValue,
double  globalBestPrimalBoundValue,
double  detTime,
double  averageDualBoundGain 
)
virtual

create ParaSolverState object

Returns
pointer to ParaSolverState object
Parameters
racingStageif this value is 1, solver is in racing stage
notificationIdid for this notification
lcIdlc id of current ParaNode
globalSubtreeIdglobal subtree id of current ParaNode
nodesSolvednumber of nodes solved
nodesLeftnumber of remaining nodes
bestDualBoundValuebest dual bound value in that of remaining nodes
globalBestPrimalBoundValueglobal best primal bound value
detTimedeterministic time, -1: should be non-deterministic
averageDualBoundGainaverage dual bound gain received

Definition at line 201 of file bbParaCommMpi.cpp.

◆ createParaSolverTerminationState() [1/2]

ParaSolverTerminationState * createParaSolverTerminationState ( )
virtual

create ParaSolverTerminationState object by default constructor

Returns
pointer to ParaSolverTerminationState object

Implements ParaComm.

Definition at line 230 of file bbParaCommMpi.cpp.

◆ createParaSolverTerminationState() [2/2]

ParaSolverTerminationState * createParaSolverTerminationState ( int  interrupted,
int  rank,
int  totalNSolved,
int  minNSolved,
int  maxNSolved,
int  totalNSent,
int  totalNImprovedIncumbent,
int  nParaNodesReceived,
int  nParaNodesSolved,
int  nParaNodesSolvedAtRoot,
int  nParaNodesSolvedAtPreCheck,
int  nTransferredLocalCutsFromSolver,
int  minTransferredLocalCutsFromSolver,
int  maxTransferredLocalCutsFromSolver,
int  nTransferredBendersCutsFromSolver,
int  minTransferredBendersCutsFromSolver,
int  maxTransferredBendersCutsFromSolver,
int  nTotalRestarts,
int  minRestarts,
int  maxRestarts,
int  nTightened,
int  nTightenedInt,
int  calcTerminationState,
double  runningTime,
double  idleTimeToFirstParaNode,
double  idleTimeBetweenParaNodes,
double  iddleTimeAfterLastParaNode,
double  idleTimeToWaitNotificationId,
double  idleTimeToWaitAckCompletion,
double  idleTimeToWaitToken,
double  totalRootNodeTime,
double  minRootNodeTime,
double  maxRootNodeTime,
double  detTime 
)
virtual

create ParaSolverTerminationState object

Returns
pointer to ParaSolverTerminationState object
Parameters
interruptedindicate that this solver is interrupted or not. 0: not interrupted, 1: interrupted 2: checkpoint, 3: racing-ramp up
rankrank of this solver
totalNSolvedaccumulated number of nodes solved in this ParaSolver
minNSolvedminimum number of subtree nodes rooted from ParaNode
maxNSolvedmaximum number of subtree nodes rooted from ParaNode
totalNSentaccumulated number of nodes sent from this ParaSolver
totalNImprovedIncumbentaccumulated number of improvements of incumbent value in this ParaSolver
nParaNodesReceivednumber of ParaNodes received in this ParaSolver
nParaNodesSolvednumber of ParaNodes solved ( received ) in this ParaSolver
nParaNodesSolvedAtRootnumber of ParaNodes solved at root node before sending
nParaNodesSolvedAtPreChecknumber of ParaNodes solved at pre-checking of root node solvability
nTransferredLocalCutsFromSolvernumber of local cuts transferred from this Solver
minTransferredLocalCutsFromSolverminimum number of local cuts transferred from this Solver
maxTransferredLocalCutsFromSolvermaximum number of local cuts transferred from this Solver
nTransferredBendersCutsFromSolvernumber of benders cuts transferred from this Solver
minTransferredBendersCutsFromSolverminimum number of benders cuts transferred from this Solver
maxTransferredBendersCutsFromSolvermaximum number of benders cuts transferred from this Solver
nTotalRestartsnumber of total restarts
minRestartsminimum number of restarts
maxRestartsmaximum number of restarts
nTightenednumber of tightened variable bounds during racing stage
nTightenedIntnumber of tightened integral variable bounds during racing stage
calcTerminationStatetermination sate of a calculation in a Solver
runningTimethis solver running time
idleTimeToFirstParaNodeidle time to start solving the first ParaNode
idleTimeBetweenParaNodesidle time between ParaNodes processing
iddleTimeAfterLastParaNodeidle time after the last ParaNode was solved
idleTimeToWaitNotificationIdidle time to wait notification Id messages
idleTimeToWaitAckCompletionidle time to wait ack completion message
idleTimeToWaitTokenidle time to wait token
totalRootNodeTimetotal time consumed by root node processes
minRootNodeTimeminimum time consumed by root node processes
maxRootNodeTimemaximum time consumed by root node processes
detTimedeterministic time, -1: should be non-deterministic

Definition at line 237 of file bbParaCommMpi.cpp.

References interrupted.

◆ createParaTask()

ParaTask * createParaTask ( )
virtual

create ParaNode object by default constructor

Returns
pointer to ParaNode object

Implements ParaComm.

Definition at line 165 of file bbParaCommMpi.cpp.

◆ getTagString()

const char * getTagString ( int  tag)
protectedvirtual

get Tag string for debugging

Returns
string which shows Tag
Parameters
tagtag to be converted to string

Reimplemented from ParaCommMpi.

Reimplemented in ScipParaCommMpi.

Definition at line 90 of file bbParaCommMpi.cpp.

References ParaCommMpi::getTagString(), UG::N_BB_MPI_TAGS, UG::TAG_BB_FIRST, and BbParaCommMpi::tagStringTable.

◆ tagStringTableIsSetUpCoorectly()

bool tagStringTableIsSetUpCoorectly ( )
protectedvirtual

check if tag string table (for debugging) set up correctly

Returns
true if tag string table is set up correctly, false otherwise

Reimplemented from ParaCommMpi.

Reimplemented in ScipParaCommMpi.

Definition at line 83 of file bbParaCommMpi.cpp.

References UG::N_BB_MPI_TAGS, UG::N_MPI_TAGS, and BbParaCommMpi::tagStringTable.

Member Data Documentation

◆ datatypes

MPI_Datatype datatypes
staticprotected

data type mapping table to MPI data type

Definition at line 79 of file bbParaCommMpi.h.

◆ tagStringTable

const char * tagStringTable
staticprotected

table for tag name string

Definition at line 80 of file bbParaCommMpi.h.

Referenced by BbParaCommMpi::getTagString(), and BbParaCommMpi::tagStringTableIsSetUpCoorectly().

◆ tokenAccessLock

pthread_mutex_t tokenAccessLock
protected

mutex for pthread thread

Definition at line 85 of file bbParaCommMpi.h.

Referenced by BbParaCommMpi::BbParaCommMpi().