63 UGS::UgsParaCommMpi *inCommUgs,
69 bool *inRacingSolversExist,
73 : nHandlers(inNHandlers),
75 racingRampUpMessageHandler(0),
76 globalSubtreeIdGen(0),
77 paraParams(inParaParamSet),
79 racingSolversExist(inRacingSolversExist),
82 computationIsInterrupted(false),
83 interruptedFromControlTerminal(false),
84 hardTimeLimitIsReached(false),
85 memoryLimitIsReached(false),
86 interruptIsRequested(false),
88 paraRacingSolverPool(0),
89 nSolvedInInterruptedRacingSolvers(-1),
90 nTasksLeftInInterruptedRacingSolvers(-1),
91 previousCheckpointTime(0.0),
94 racingWinnerParams(0),
95 racingTermination(false),
96 nSolvedRacingTermination(0),
98 paraTimer(inParaTimer),
99 paraDetTimer(inParaDetTimer),
100 osLogSolvingStatus(0),
101 osLogTasksTransfer(0),
102 osStatisticsFinalRun(0),
103 osStatisticsRacingRampUp(0),
105 terminationIssued(false)
137 std::ostringstream s;
142 << commUgs->getMySolverName() <<
"_" 157 std::cout <<
"Solving status log file cannot open : file name = " << s.str() << std::endl;
166 std::ostringstream s;
171 << commUgs->getMySolverName() <<
"_" 186 std::cout <<
"Task transfer log file cannot open : file name = " << s.str() << std::endl;
197 std::ostringstream ssfr;
202 << commUgs->getMySolverName() <<
"_" 217 std::cout <<
"Statistics file for final run cannot open : file name = " << ssfr.str() << std::endl;
309 delete paraSolverTerminationState;
346 int startRank = token[0];
382 int exitSolverRequest = 0;
435 <<
"] " << state->
toString() << std::endl;
464 <<
"] " << state->
toString() << std::endl;
MessageHandlerFunctionPointer * messageHandler
message handlers table for primary phase
virtual int processTagSolution(int source, int tag)=0
function to process TagSolution message
std::ostream * osStatisticsFinalRun
ostream for statistics of the final run
virtual ParaSolverTerminationState * createParaSolverTerminationState()=0
create ParaSolverTerminationState object by default constructor
ParaSolverPool * paraSolverPool
Pools in LoadCorrdinator.
virtual std::string toString(ParaInitiator *initiator)=0
stringfy ParaSolverTerminationState object
virtual ParaTask * getCurrentTask(int rank)=0
get current solving ParaTask in the Solver specified by rank
static const int LogSolvingStatusFilePath
int getInterruptedMode()
getter of interrupted flag
virtual void writeTransferLogInRacing(int rank, ParaCalculationState *state)
write transfer log in racing
virtual double getEpsilon()=0
get epsilon specified
static const int TagTerminateRequest
static ScipParaInitiator * paraInitiator
int(UG::ParaLoadCoordinator::* MessageHandlerFunctionPointer)(int, int)
double getDeterministicTime()
getter of deterministic time
virtual bool isSolverActive(int rank)=0
check if the Solver specified by rank is active or not
static const int TagRampUp
ParaInitiator * paraInitiator
initiator
virtual void setToken(int rank, int *token)
set received token to this communicator
static const int TagHardTimeLimit
std::ostream * osLogSolvingStatus
ostram for solving status to switch output location
Base class of Calculation state in a ParaSolver.
virtual bool isTerminated(int rank)=0
check if the Solver specified by rank is terminated or not
virtual int processTagSolverState(int source, int tag)=0
function to process TagSolverState message
void sendTagToAllSolvers(const int tag)
check if current stage is in racing or not
virtual int processTagTerminated(int source, int tag)
function to process TagTerminated message
virtual void receive(ParaComm *comm, int source, int tag)=0
receive this object
ParaRacingSolverPool * paraRacingSolverPool
racing solver pool
ParaDeterministicTimer * paraDetTimer
deterministic timer used in case of deterministic mode this timer need to be created in case of deter...
class for deterministic timer
virtual void terminateAllSolvers()
terminate all solvers
Base class for initial statistics collecting class.
virtual const char * getProbName()=0
get problem name
#define PARA_COMM_CALL(paracommcall)
static const int Deterministic
virtual int getRank()=0
get rank of this process or this thread depending on run-time environment
virtual int processTagTask(int source, int tag)=0
Message handlers.
std::ofstream ofsLogTasksTransfer
ofstream for task transfer info.
std::ofstream ofsLogSolvingStatus
ofstream for solving status
virtual double getElapsedTime()=0
getter of the deterministic time
std::mutex routineMutex
used to exclusive control of routines
static const int TagSolverState
static const int TagSolution
ParaParamSet * paraParams
UG parameter set.
virtual int processTagToken(int source, int tag)
function to process TagToken message
virtual void terminateRequested(int rank)=0
set the Solver specified by rank is terminate requested
static const int TagToken
static const int LogTasksTransfer
class ParaSolverTerminationState (Solver termination state in a ParaSolver)
virtual int processTagHardTimeLimit(int source, int tag)
function to process TagHardTimeLimit message
virtual int receive(void *bufer, int count, const int datatypeId, int source, const int tag)=0
receive function for standard ParaData types
ParaComm * paraComm
communicator used
ParaLoadCoordinator(int nHandlers, ParaComm *inComm, ParaParamSet *inParaParamSet, ParaInitiator *paraInitiator, bool *racingSolversExist, ParaTimer *paraTimer, ParaDeterministicTimer *detTimer)
constructor
bool logTasksTransferFlag
indicate if task transfer info. is logged or not
std::ostream * osLogTasksTransfer
ostream for task transfer info. to switch output location
const char * getStringParamValue(int param)
for char parameters
virtual int processTagCompletionOfCalculation(int source, int tag)=0
function to process TagCompletionOfCalculation message
static const int ParaBYTE
static const int TagTerminated
virtual void terminated(int rank)=0
set the Solver specified by rank is terminated
bool computationIsInterrupted
indicate that current computation is interrupted or not
virtual bool isTerminateRequested(int rank)=0
check if the Solver specified by rank is terminate requested or not
bool hardTimeLimitIsReached
indicate that hard time limit is reached or not
bool racingTermination
racing termination information
virtual bool isInterruptRequested(int rank)=0
check if the Solver specified by rank is interrupt requested or not
static const int TagInterruptRequest
virtual void writeTransferLog(int rank, ParaCalculationState *state)
write transfer log
virtual int send(void *bufer, int count, const int datatypeId, int dest, const int tag)=0
send function for standard ParaData types
virtual void sendRampUpToAllSolvers()
notify ramp-up to all solvers
virtual ParaTask * getCurrentTask(int rank)=0
get root ParaTask object of the Solver specified
static const int LogSolvingStatus
virtual int getSize()=0
get number of UG processes or UG threads depending on run-time environment
bool logSolvingStatusFlag
output streams and flags which indicate the output is specified or not
virtual ParaInstance * getParaInstance()=0
get instance object
static const int StatisticsToStdout
int nHandlers
number of valid handlers
bool terminationIssued
indicate termination request is issued
size_t nTerminated
counter to check if all solvers are terminated or not
virtual void update(double value)=0
update function of the deterministic time. the deterministic time is a kind of counter ...
virtual std::string toString()=0
stringfy ParaCalculationState
static const int TagCompletionOfCalculation
std::ofstream ofsStatisticsFinalRun
ofstream for statistics of the final run
char lastCheckpointTimeStr[26]
lastCheckpointTimeStr[0] == ' ' means no checkpoint
static const int LogTasksTransferFilePath
Base class of communicator object.
static const int TagAckCompletion
bool getBoolParamValue(int param)
for bool parameters