51 #include "scip/scip.h" 63 #include "ugs/ugsDef.h" 64 #include "ugs/ugsParaCommMpi.h" 105 if (paraInitiator != 0)
124 std::cout << std::endl;
125 std::cout <<
"syntax: " << argv[0] <<
" fscip_param_file problem_file_name " 126 <<
"[-l <logfile>] [-q] [-sl <settings>] [-s <settings>] [-sr <root_settings>] [-w <prefix_warm>] [-sth <number>] [-fsol <solution_file>] [-isol <initial solution file]" << std::endl;
127 std::cout <<
" -l <logfile> : copy output into log file" << std::endl;
128 std::cout <<
" -q : suppress screen messages" << std::endl;
129 std::cout <<
" -sl <settings> : load parameter settings (.set) file for LC presolving" << std::endl;
130 std::cout <<
" -s <settings> : load parameter settings (.set) file for solvers" << std::endl;
131 std::cout <<
" -sr <root_settings> : load parameter settings (.set) file for root" << std::endl;
132 std::cout <<
" -w <prefix_warm> : warm start file prefix ( prefix_warm_nodes.gz and prefix_warm_solution.txt are read )" << std::endl;
133 std::cout <<
" -sth <number> : the number of solver threads used" << std::endl;
134 std::cout <<
" -fsol <solution file> : specify output solution file" << std::endl;
135 std::cout <<
" -isol <intial solution file> : specify initial solution file" << std::endl;
143 if( !paraParamSet->getBoolParamValue(
Quiet) )
145 std::ofstream ofsParamsOutputFile;
146 std::ostringstream s;
157 ofsParamsOutputFile.open(s.str().c_str());
158 if( !ofsParamsOutputFile ){
159 std::cout <<
"Cannot open ParaParams output file: file name = " << s.str() << std::endl;
162 paraParamSet->write(&ofsParamsOutputFile);
163 ofsParamsOutputFile.close();
172 if( !paraParamSet->getBoolParamValue(
Quiet) )
174 std::ofstream ofsSolverParamsOutputFile;
175 std::ostringstream s;
186 ofsSolverParamsOutputFile.open(s.str().c_str());
187 if( !ofsSolverParamsOutputFile ){
188 std::cout <<
"Cannot open Solver parameters output file: file name = " << s.str() << std::endl;
192 ofsSolverParamsOutputFile.close();
203 assert( solverThreadData->
rank <
comm->getSize() );
205 comm->solverInit(solverThreadData->
rank, paraParamSet);
209 printf(
"ULIBC_bind_pthread_thread( comm->getRank(): %d )\n",
comm->getRank());
210 ULIBC_bind_pthread_thread(
comm->getRank() );
213 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS 214 SCIPmessageSetDefaultHandler();
222 int ierr = placeme(1, PLACEME_SCHEME_DEFAULT, PLACEME_LEVEL_DEFAULT, 1,
"HLRN| ");
224 case PLACEME_SUCCESS:
225 fprintf(stdout,
"task %2d: pinning successful\n",
comm->getRank());
227 case PLACEME_NOTDONE:
228 fprintf(stdout,
"task %2d: pinning not changed on request\n",
comm->getRank());
231 fprintf(stdout,
"task %2d: pinning not successful, left unchanged\n",
comm->getRank());
236 char **
argv = solverThreadData->
argv;
254 std::cout <<
"After Rank " <<
comm->getRank() <<
" Solver initialized 1: " << paraTimer->
getElapsedTime() << std::endl;
270 (void)
comm->probe(&source, &tag);
279 dynamic_cast<BbParaSolver *
>(paraSolver)->setKeepRacing(
false);
283 dynamic_cast<BbParaSolver *
>(paraSolver)->setKeepRacing(
true);
285 (void)
comm->probe(&source, &tag);
293 std::cout <<
"After Rank " <<
comm->getRank() <<
" Solver initialized 2: " << paraTimer->
getElapsedTime() << std::endl;
296 paraSolver->
run( racingRampUpParamSet );
317 delete solverThreadData;
319 if( detTimer )
delete detTimer;
365 static const int solverOrigin = 1;
367 bool racingSolversExist =
false;
370 char *configFileName = 0;
371 for(
int i = 1; i <
argc; ++i )
373 if ( strcmp(argv[i],
"-ugsc") == 0 )
378 configFileName = argv[i];
383 std::cerr <<
"missing file name after parameter '-ugsc" << std::endl;
389 UGS::UgsParaCommMpi *commUgs = 0;
397 commUgs =
new UGS::UgsParaCommMpi();
398 commUgs->init(argc,argv);
420 struct sigaction newaction;
424 newaction.sa_flags = SA_RESTART | SA_NODEFER | SA_RESETHAND;
425 (void)sigemptyset(&newaction.sa_mask);
428 (void)sigaction(SIGINT, &newaction, NULL);
432 comm->init(argc,argv);
437 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS 438 SCIP_CALL_ABORT( SCIPcreateMesshdlrPThreads(
comm->getSize()) );
439 SCIPmessageSetDefaultHandler();
447 int ierr = placeme(1, PLACEME_SCHEME_DEFAULT, PLACEME_LEVEL_DEFAULT, 1,
"HLRN| ");
449 case PLACEME_SUCCESS:
450 fprintf(stdout,
"task %2d: pinning successful\n",
comm->getRank());
452 case PLACEME_NOTDONE:
453 fprintf(stdout,
"task %2d: pinning not changed on request\n",
comm->getRank());
456 fprintf(stdout,
"task %2d: pinning not successful, left unchanged\n",
comm->getRank());
462 paraParamSet->read(
comm, argv[1]);
463 comm->lcInit(paraParamSet);
468 ULIBC_set_affinity_policy(nSolvers, SCATTER_MAPPING, THREAD_TO_CORE );
474 if( paraInitiator->
init(paraParamSet, argc, argv) )
476 if( dynamic_cast<ScipParaInitiator *>(paraInitiator)->isSolvedAtInit() )
485 std::cout <<
"After Initiator initialized: " << paraTimer->
getElapsedTime() << std::endl;
504 std::thread *solverThreads =
new std::thread[
nSolvers];
509 solverThreadData->
argc = argc;
510 solverThreadData->
argv = argv;
512 solverThreadData->
rank = (i+1);
526 if( dynamic_cast<ScipParaInitiator *>(paraInitiator)->isSolvedAtInit() )
538 solverThreads[i].join();
541 delete [] solverThreads;
548 if( commUgs )
delete commUgs;
550 if( detTimer )
delete detTimer;
575 paraLc->
run(rootNode);
583 for(
int i = 1; i <
comm->getSize(); i++ )
590 racingRampUpParams[i-solverOrigin]->send(
comm, i)
596 paraLc->
run(rootNode, (
comm->getSize()-1), racingRampUpParams );
597 for(
int i = 1; i <
comm->getSize(); i++ )
599 if( racingRampUpParams[i-solverOrigin] )
delete racingRampUpParams[i-solverOrigin];
601 delete [] racingRampUpParams;
613 solverThreads[i].join();
616 delete [] solverThreads;
620 std::cout <<
"*** FiberSCIP process is interrupted. ***" << std::endl;
626 if( detTimer )
delete detTimer;
630 if( commUgs )
delete commUgs;
633 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS 634 SCIPfreeMesshdlrPThreads();
ParaDeterministicTimer extension for SCIP.
ParaInstance extenstion for SCIP solver.
bool isWarmStarted()
check if the execution is warm started (restarted) or not
static const int LogSolvingStatusFilePath
UG::BbParaDiffSubproblem * makeRootNodeDiffSubproblem()
static ScipParaCommTh * comm
static ScipParaParamSet * paraParamSet
virtual double getElapsedTime()=0
get elapsed time
static const int TagTerminateRequest
static ScipParaInitiator * paraInitiator
void sendSolverInitializationMessage()
void outputSolverParams()
virtual int bcast(ParaComm *comm, int rank, int method)=0
broadcast function to all solvers
static const int OutputParaParams
static ScipParaLoadCoordinator * paraLc
UG::ParaInstance * getParaInstance()
class for deterministic timer
virtual const char * getProbName()=0
get problem name
#define PARA_COMM_CALL(paracommcall)
static const int Deterministic
static void interruptHandler(int signum)
ParaSolver extension for SCIP: Parallelized solver implementation for SCIP.
void * runSolverThread(void *threadData)
void outputFinalSolverStatistics(std::ostream *os, double time)
void setUserPlugins(ParaInitiator *initiator)
const char * getPrefixWarm()
get prefix of warm start (restart) files
long long virtualMemUsedAtLc
SCIP ParaComm extension for threads communication.
void outputCommandLineMessages(char **argv)
virtual void run()
run function to start main process
void writeSolverParameters(std::ostream *os)
Class for LoadCoordinator.
virtual void interrupt()
interrupt from out side
#define THROW_LOGICAL_ERROR2(msg1, msg2)
virtual void init(ParaComm *paraComm)=0
if you want to set original initial time, you can do it init()
static const int InstanceTransferMethod
Time limit monitor thread class.
static const int ParaBYTE
void outputParaParamSet()
virtual int init(UG::ParaParamSet *paraParams, int argc, char **argv)
int main(int argc, char **argv)
static const int RampUpPhaseProcess
static const int TagKeepRacing
double memoryLimitOfSolverSCIP
static const int StatisticsToStdout
ParaInitiator extension for SCIP solver.
class ParaRacingRampUpParamSet (parameter set for racing ramp-up)
void generateRacingRampUpParameterSets(int nParamSets, UG::ParaRacingRampUpParamSet **racingRampUpParamSets)
virtual int receive(ParaComm *comm, int source)=0
receive BbParaRacingRampUpParamSet
struct SolverThreadData_t SolverThreadData