Scippy

UG

Ubiquity Generator framework

fscip.cpp
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the program and software framework */
4 /* UG --- Ubquity Generator Framework */
5 /* */
6 /* Copyright Written by Yuji Shinano <shinano@zib.de>, */
7 /* Copyright (C) 2021 by Zuse Institute Berlin, */
8 /* licensed under LGPL version 3 or later. */
9 /* Commercial licenses are available through <licenses@zib.de> */
10 /* */
11 /* This code is free software; you can redistribute it and/or */
12 /* modify it under the terms of the GNU Lesser General Public License */
13 /* as published by the Free Software Foundation; either version 3 */
14 /* of the License, or (at your option) any later version. */
15 /* */
16 /* This program is distributed in the hope that it will be useful, */
17 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
18 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
19 /* GNU Lesser General Public License for more details. */
20 /* */
21 /* You should have received a copy of the GNU Lesser General Public License */
22 /* along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 /* */
24 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
25 
26 /**@file fscip.cpp
27  * @brief FiberSCIP MAIN.
28  * @author Yuji Shinano
29  *
30  *
31  *
32  */
33 
34 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
35 
36 
37 #ifndef _MSC_VER
38 #include <unistd.h>
39 #endif
40 #include <cfloat>
41 #include <thread>
42 #include <cstdlib>
43 #include <signal.h>
45 #include "ug_bb/bbParaInstance.h"
47 #include "ug_bb/bbParaParamSet.h"
49 #include "ug_bb/bbParaInitiator.h"
50 #include "ug_bb/bbParaNodeTh.h"
51 #include "scip/scip.h"
52 #include "scipParaCommTh.h"
53 #include "scipParaInstance.h"
55 #include "scipParaSolver.h"
56 #include "scipParaInitiator.h"
58 #include "scipParaParamSet.h"
59 #ifdef UG_WITH_ULIBC
60 #include "ulibc.h"
61 #endif
62 #ifdef UG_WITH_UGS
63 #include "ugs/ugsDef.h"
64 #include "ugs/ugsParaCommMpi.h"
65 #endif
66 
67 using namespace UG;
68 using namespace ParaSCIP;
69 
70 long long virtualMemUsedAtLc = 0;
71 double memoryLimitOfSolverSCIP = 8796093022207;
72 
73 static ScipParaCommTh *comm = 0;
75 static int nSolvers = 0;
78 static bool interrupted = false;
79 
81  int argc;
82  char **argv;
84  int rank;
85 };
86 
88 
89 extern void
90 setUserPlugins(ParaInitiator *initiator);
91 extern void
92 setUserPlugins(ParaInstance *instance); /** this should not be used */
93 extern void
94 setUserPlugins(ParaSolver *solver);
95 
96 /** interrupt handler for CTRL-C interrupts */
97 static
99  int signum /**< interrupt signal number */
100  )
101 {
102  // std::cout << "in interrupt hander" << std::endl;
103  if (paraLc == 0)
104  {
105  if (paraInitiator != 0)
106  dynamic_cast<ScipParaInitiator *>(paraInitiator)->interrupt(); //this interrupt initSolve, see below
107  }
108  else
109  {
110  paraLc->interrupt();
111  // delete paraLc;
112  }
113 
114  interrupted = true;
115  exit(0);
116 
117 }
118 
119 void
121  char **argv
122  )
123 {
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;
136 }
137 
138 void
140  // ParaInitiator *paraInitiator
141  )
142 {
143  if( !paraParamSet->getBoolParamValue(Quiet) )
144  {
145  std::ofstream ofsParamsOutputFile;
146  std::ostringstream s;
147  if( paraInitiator->getPrefixWarm() )
148  {
149  s << paraInitiator->getPrefixWarm();
150  }
151  else
152  {
153  s << paraParamSet->getStringParamValue(LogSolvingStatusFilePath)
154  << paraInitiator->getParaInstance()->getProbName();
155  }
156  s << ".prm";
157  ofsParamsOutputFile.open(s.str().c_str());
158  if( !ofsParamsOutputFile ){
159  std::cout << "Cannot open ParaParams output file: file name = " << s.str() << std::endl;
160  exit(1);
161  }
162  paraParamSet->write(&ofsParamsOutputFile);
163  ofsParamsOutputFile.close();
164  }
165 }
166 
167 void
169  // ParaInitiator *paraInitiator
170  )
171 {
172  if( !paraParamSet->getBoolParamValue(Quiet) )
173  {
174  std::ofstream ofsSolverParamsOutputFile;
175  std::ostringstream s;
176  if( paraInitiator->getPrefixWarm() )
177  {
178  s << paraInitiator->getPrefixWarm();
179  }
180  else
181  {
182  s << paraParamSet->getStringParamValue(LogSolvingStatusFilePath)
183  << paraInitiator->getParaInstance()->getProbName();
184  }
185  s << "_solver.prm";
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;
189  exit(1);
190  }
191  paraInitiator->writeSolverParameters(&ofsSolverParamsOutputFile);
192  ofsSolverParamsOutputFile.close();
193  }
194 }
195 
196 void *
198  void *threadData
199  )
200 {
201  SolverThreadData *solverThreadData = static_cast<SolverThreadData *>(threadData);
202 
203  assert( solverThreadData->rank < comm->getSize() );
204 // #ifdef _COMM_CPP11
205  comm->solverInit(solverThreadData->rank, paraParamSet);
206 // #endif
207 
208 #ifdef UG_WITH_ULIBC
209  printf("ULIBC_bind_pthread_thread( comm->getRank(): %d )\n", comm->getRank());
210  ULIBC_bind_pthread_thread( comm->getRank() );
211 #endif
212 
213 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS
214  SCIPmessageSetDefaultHandler();
215 #endif
216 
217 #ifdef _PLACEME
218  /*
219  * Do placement
220  */
221 
222  int ierr = placeme(1, PLACEME_SCHEME_DEFAULT, PLACEME_LEVEL_DEFAULT, 1, "HLRN| ");
223  switch(ierr) {
224  case PLACEME_SUCCESS:
225  fprintf(stdout,"task %2d: pinning successful\n", comm->getRank());
226  break;
227  case PLACEME_NOTDONE:
228  fprintf(stdout,"task %2d: pinning not changed on request\n", comm->getRank());
229  break;
230  default:
231  fprintf(stdout,"task %2d: pinning not successful, left unchanged\n", comm->getRank());
232  }
233 #endif
234 
235  int argc = solverThreadData->argc;
236  char **argv = solverThreadData->argv;
237  ParaTimer *paraTimer = solverThreadData->paraTimer;
238  ParaDeterministicTimer *detTimer = 0;
239 
240  if( paraParamSet->getBoolParamValue(Deterministic) )
241  {
242  detTimer = new ScipParaDeterministicTimer();
243  }
244 
245  ParaInstance *paraInstance = comm->createParaInstance();
246  // setUserPlugins(paraInstance); // instance data should not be read from original data file
247  paraInstance->bcast(comm, 0, paraParamSet->getIntParamValue(InstanceTransferMethod));
248  ScipParaSolver *paraSolver = new ScipParaSolver(argc, argv, comm, paraParamSet, paraInstance, detTimer, paraTimer->getElapsedTime(), true );
249  setUserPlugins(paraSolver);
250 
251  if( paraParamSet->getBoolParamValue(StatisticsToStdout) )
252  {
253  comm->lockApp();
254  std::cout << "After Rank " << comm->getRank() << " Solver initialized 1: " << paraTimer->getElapsedTime() << std::endl;
255  comm->unlockApp();
256  }
257 
258  // if( paraParamSet->getIntParamValue(RampUpPhaseProcess) == 0 || paraSolver->isWarmStarted() )
259  if( paraParamSet->getIntParamValue(RampUpPhaseProcess) == 0 ||
260  paraParamSet->getIntParamValue(RampUpPhaseProcess) == 3
261  )
262  {
263  paraSolver->run();
264  }
265  else if( paraParamSet->getIntParamValue(RampUpPhaseProcess) == 1 ||
266  paraParamSet->getIntParamValue(RampUpPhaseProcess) == 2 ) // racing ramp-up
267  {
268  int source;
269  int tag;
270  (void)comm->probe(&source, &tag);
271  if( tag == TagKeepRacing )
272  {
273  int keep = 0;
275  comm->receive( &keep, 1, ParaINT, 0, UG::TagKeepRacing)
276  );
277  if( keep == 0 )
278  {
279  dynamic_cast<BbParaSolver *>(paraSolver)->setKeepRacing(false);
280  }
281  else
282  {
283  dynamic_cast<BbParaSolver *>(paraSolver)->setKeepRacing(true);
284  }
285  (void)comm->probe(&source, &tag);
286  ScipParaRacingRampUpParamSet *racingRampUpParamSet = dynamic_cast<ScipParaRacingRampUpParamSet *>(comm->createParaRacingRampUpParamSet());
288  racingRampUpParamSet->receive(comm, 0)
289  );
290  if( paraParamSet->getBoolParamValue(StatisticsToStdout) )
291  {
292  comm->lockApp();
293  std::cout << "After Rank " << comm->getRank() << " Solver initialized 2: " << paraTimer->getElapsedTime() << std::endl;
294  comm->unlockApp();
295  }
296  paraSolver->run( racingRampUpParamSet );
297  }
298  else
299  {
300  if( tag == TagTerminateRequest )
301  {
303  comm->receive( NULL, 0, ParaBYTE, source, TagTerminateRequest )
304  );
305  // when solver is deleted, solver's destructor sends termination status
306  }
307  else
308  {
309  THROW_LOGICAL_ERROR2("Invalid Tag is received in ParaSCIP solver main: ", tag )
310  }
311  }
312  }
313  else
314  {
315  THROW_LOGICAL_ERROR2("Invalid RampUpPhaseProcess: ", paraParamSet->getIntParamValue(RampUpPhaseProcess) )
316  }
317  delete solverThreadData;
318  delete paraSolver;
319  if( detTimer ) delete detTimer;
320 
321  // ULIBC_unbind_thread();
322 
323  return 0;
324 }
325 
326 //void *
327 //runTimeLimitMonitorThread(
328 // void *threadData
329 // )
330 //{
331 //// #ifdef _COMM_PTH
332 //// comm->waitUntilRegistered();
333 //// #endif
334 //// #ifdef _COMM_CPP11
335 // SolverThreadData *monitorThreadData = static_cast<SolverThreadData *>(threadData);
336 // comm->solverInit(monitorThreadData->rank, paraParamSet);
337 //#ifdef _COMM_PTH
338 // comm->waitUntilRegistered();
339 //#endif
340 // delete monitorThreadData;
341 //// #endif
342 //
343 // ParaTimeLimitMonitorTh *monitor = new ParaTimeLimitMonitorTh(comm, paraParamSet->getRealParamValue(TimeLimit));
344 // monitor->run();
345 // delete monitor;
346 //
347 // // ULIBC_unbind_thread();
348 //#ifdef _COMM_PTH
349 // pthread_exit(NULL);
350 //#endif
351 // return 0;
352 //}
353 
354 /**************************************************************************************
355  * *
356  * Command line see outputCommandLineMessages() * *
357  * *
358  **************************************************************************************/
359 int
361  int argc,
362  char **argv
363  )
364 {
365  static const int solverOrigin = 1;
366 
367  bool racingSolversExist = false;
368 
369 #ifdef UG_WITH_UGS
370  char *configFileName = 0;
371  for( int i = 1; i < argc; ++i )
372  {
373  if ( strcmp(argv[i], "-ugsc") == 0 )
374  {
375  i++;
376  if( i < argc )
377  {
378  configFileName = argv[i];
379  break;
380  }
381  else
382  {
383  std::cerr << "missing file name after parameter '-ugsc" << std::endl;
384  exit(1);
385  }
386  }
387  }
388 
389  UGS::UgsParaCommMpi *commUgs = 0; // commUgs != 0 means ParaXpress runs under UGS
390  if( configFileName )
391  {
392  if( argc < 4 )
393  {
395  return 1;
396  }
397  commUgs = new UGS::UgsParaCommMpi();
398  commUgs->init(argc,argv);
399  }
400  else
401  {
402  if( argc < 3 )
403  {
405  return 1;
406  }
407  }
408 #else
409  if( argc < 3 )
410  {
412  return 1;
413  }
414 #endif
415 
416  /** catch SIGINT **/
417 #ifdef NO_SIGACTION
418  (void)signal(SIGINT, interruptHandler);
419 #else
420  struct sigaction newaction;
421 
422  /* initialize new signal action */
423  newaction.sa_handler = interruptHandler;
424  newaction.sa_flags = SA_RESTART | SA_NODEFER | SA_RESETHAND;
425  (void)sigemptyset(&newaction.sa_mask);
426 
427  /* set new signal action */
428  (void)sigaction(SIGINT, &newaction, NULL);
429 #endif
430 
431  comm = new ScipParaCommTh();
432  comm->init(argc,argv);
433 
434  ParaTimer *paraTimer = comm->createParaTimer();
435  paraTimer->init(comm);
436 
437 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS
438  SCIP_CALL_ABORT( SCIPcreateMesshdlrPThreads(comm->getSize()) );
439  SCIPmessageSetDefaultHandler();
440 #endif
441 
442 #ifdef _PLACEME
443  /*
444  * Do placement
445  */
446 
447  int ierr = placeme(1, PLACEME_SCHEME_DEFAULT, PLACEME_LEVEL_DEFAULT, 1, "HLRN| ");
448  switch(ierr) {
449  case PLACEME_SUCCESS:
450  fprintf(stdout,"task %2d: pinning successful\n", comm->getRank());
451  break;
452  case PLACEME_NOTDONE:
453  fprintf(stdout,"task %2d: pinning not changed on request\n", comm->getRank());
454  break;
455  default:
456  fprintf(stdout,"task %2d: pinning not successful, left unchanged\n", comm->getRank());
457  }
458 #endif
459 
460  nSolvers = comm->getSize() - 1;
461  paraParamSet = dynamic_cast<ScipParaParamSet *>(comm->createParaParamSet());
462  paraParamSet->read(comm, argv[1]);
463  comm->lcInit(paraParamSet);
464 
465 #ifdef UG_WITH_ULIBC
466  ULIBC_init();
467  // number of threads with ULIBC == nSolvers
468  ULIBC_set_affinity_policy(nSolvers, SCATTER_MAPPING, THREAD_TO_CORE );
469 #endif
470 
471  // ParaInitiator *paraInitiator = new ScipParaInitiator(comm, paraTimer);
472  paraInitiator = new ScipParaInitiator(comm, paraTimer);
473  setUserPlugins(paraInitiator);
474  if( paraInitiator->init(paraParamSet, argc, argv) )
475  {
476  if( dynamic_cast<ScipParaInitiator *>(paraInitiator)->isSolvedAtInit() )
477  {
478  paraInitiator->outputFinalSolverStatistics(0, paraTimer->getElapsedTime());
479  return 0;
480  }
481  }
482 
483  if( paraParamSet->getBoolParamValue(StatisticsToStdout) )
484  {
485  std::cout << "After Initiator initialized: " << paraTimer->getElapsedTime() << std::endl;
486  }
487 
488  ParaInstance *paraInstance = paraInitiator->getParaInstance();
489  if( paraParamSet->getIntParamValue(OutputParaParams) > 0 )
490  {
491  // outputParaParamSet(paraInitiator);
492  // outputSolverParams(paraInitiator);
495  }
496 
497 // #ifdef _COMM_PTH
498 // SolverThreadData solverThreadData;
499 // solverThreadData.argc = argc;
500 // solverThreadData.argv = argv;
501 // solverThreadData.paraTimer = paraTimer;
502 // #endif
503 
504  std::thread *solverThreads = new std::thread[nSolvers];
505 
506  for( int i = 0; i < nSolvers; i++ )
507  {
508  SolverThreadData *solverThreadData = new SolverThreadData;
509  solverThreadData->argc = argc;
510  solverThreadData->argv = argv;
511  solverThreadData->paraTimer = paraTimer;
512  solverThreadData->rank = (i+1);
513  // comm->solverInit(i+1, paraParamSet);
514  solverThreads[i] = std::thread(runSolverThread, solverThreadData);
515  }
516 
517  ParaDeterministicTimer *detTimer = 0;
518  if( paraParamSet->getBoolParamValue(Deterministic) )
519  {
520  detTimer = new ScipParaDeterministicTimer();
521  }
522 
523  paraInstance->bcast(comm, 0, paraParamSet->getIntParamValue(InstanceTransferMethod));
524  paraInitiator->sendSolverInitializationMessage(); // This messages should be received in constructor of the target Solver
525 
526  if( dynamic_cast<ScipParaInitiator *>(paraInitiator)->isSolvedAtInit() )
527  {
528 #ifdef UG_WITH_UGS
529  paraLc = new ScipParaLoadCoordinator(commUgs, comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
530 #else
531  paraLc = new ScipParaLoadCoordinator(comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
532 #endif
533 
534  delete paraLc;
535 
536  for( int i = 0; i < nSolvers; i++ )
537  {
538  solverThreads[i].join();
539  }
540 
541  delete [] solverThreads;
542 
543  delete paraInitiator;
544  delete paraParamSet;
545  delete paraTimer;
546  delete comm;
547 #ifdef UG_WITH_UGS
548  if( commUgs ) delete commUgs;
549 #endif
550  if( detTimer ) delete detTimer;
551  return 0;
552  }
553  else
554  {
555 #ifdef UG_WITH_UGS
556  paraLc = new ScipParaLoadCoordinator(commUgs, comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
557 #else
558  paraLc = new ScipParaLoadCoordinator(comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
559 #endif
560  }
561  if( paraInitiator->isWarmStarted() )
562  {
563 #ifdef UG_WITH_ZLIB
564  paraLc->warmStart();
565 #endif
566  }
567  else
568  {
569  if( paraParamSet->getIntParamValue(RampUpPhaseProcess) == 0 ||
570  paraParamSet->getIntParamValue(RampUpPhaseProcess) == 3 )
571  {
572  BbParaNode *rootNode = new BbParaNodeTh(
573  TaskId(), TaskId(), 0, -DBL_MAX, -DBL_MAX, -DBL_MAX,
574  paraInitiator->makeRootNodeDiffSubproblem());
575  paraLc->run(rootNode);
576  }
577  else if( paraParamSet->getIntParamValue(RampUpPhaseProcess) == 1 ||
578  paraParamSet->getIntParamValue(RampUpPhaseProcess) == 2
579  ) // racing ramp-up
580  {
581  ParaRacingRampUpParamSet **racingRampUpParams = new ParaRacingRampUpParamSet *[comm->getSize()];
582  paraInitiator->generateRacingRampUpParameterSets( (comm->getSize()-1), racingRampUpParams );
583  for( int i = 1; i < comm->getSize(); i++ )
584  {
585  int noKeep = 0;
587  comm->send( &noKeep, 1, ParaINT, i, UG::TagKeepRacing)
588  );
590  racingRampUpParams[i-solverOrigin]->send(comm, i)
591  );
592  }
593  ParaTask *rootNode = comm->createParaNode(
594  TaskId(), TaskId(), 0, -DBL_MAX, -DBL_MAX, -DBL_MAX,
595  paraInitiator->makeRootNodeDiffSubproblem());
596  paraLc->run(rootNode, (comm->getSize()-1), racingRampUpParams );
597  for( int i = 1; i < comm->getSize(); i++ )
598  {
599  if( racingRampUpParams[i-solverOrigin] ) delete racingRampUpParams[i-solverOrigin];
600  }
601  delete [] racingRampUpParams;
602  }
603  else
604  {
605  THROW_LOGICAL_ERROR2("Invalid RampUpPhaseProcess: ", paraParamSet->getIntParamValue(RampUpPhaseProcess) )
606  }
607  }
608 
609  delete paraLc;
610 
611  for( int i = 0; i < nSolvers; i++ )
612  {
613  solverThreads[i].join();
614  }
615 
616  delete [] solverThreads;
617 
618  if ( interrupted )
619  {
620  std::cout << "*** FiberSCIP process is interrupted. ***" << std::endl;
621  }
622 
623  if( paraInitiator ) delete paraInitiator;
624  delete paraParamSet;
625  delete paraTimer;
626  if( detTimer ) delete detTimer;
627  delete comm;
628 
629 #ifdef UG_WITH_UGS
630  if( commUgs ) delete commUgs;
631 #endif
632 
633 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS
634  SCIPfreeMesshdlrPThreads();
635 #endif
636 
637  // ULIBC_unbind_thread();
638 
639  return 0;
640 } /* END main */
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
Definition: paraParamSet.h:127
UG::BbParaDiffSubproblem * makeRootNodeDiffSubproblem()
static ScipParaCommTh * comm
Definition: fscip.cpp:73
static ScipParaParamSet * paraParamSet
Definition: fscip.cpp:74
virtual double getElapsedTime()=0
get elapsed time
static const int TagTerminateRequest
Definition: paraTagDef.h:56
static ScipParaInitiator * paraInitiator
Definition: fscip.cpp:76
void outputSolverParams()
Definition: fscip.cpp:168
virtual int bcast(ParaComm *comm, int rank, int method)=0
broadcast function to all solvers
static const int OutputParaParams
Definition: paraParamSet.h:87
static ScipParaLoadCoordinator * paraLc
Definition: fscip.cpp:77
class BbParaParamSet
class BbParaSolver
Definition: bbParaSolver.h:63
UG::ParaInstance * getParaInstance()
ParaTimer * paraTimer
Definition: fscip.cpp:83
Class for initiator.
Definition: paraInitiator.h:62
TaskId class.
Definition: paraTask.h:222
class for deterministic timer
virtual const char * getProbName()=0
get problem name
#define PARA_COMM_CALL(paracommcall)
Definition: paraComm.h:47
static const int Deterministic
Definition: paraParamSet.h:76
static void interruptHandler(int signum)
Definition: fscip.cpp:98
ParaSolver extension for SCIP: Parallelized solver implementation for SCIP.
static bool interrupted
Definition: fscip.cpp:78
void * runSolverThread(void *threadData)
Definition: fscip.cpp:197
void outputFinalSolverStatistics(std::ostream *os, double time)
void setUserPlugins(ParaInitiator *initiator)
const char * getPrefixWarm()
get prefix of warm start (restart) files
long long virtualMemUsedAtLc
Definition: fscip.cpp:70
SCIP ParaComm extension for threads communication.
void outputCommandLineMessages(char **argv)
Definition: fscip.cpp:120
virtual void run()
run function to start main process
void writeSolverParameters(std::ostream *os)
class BbParaNodeTh
Definition: bbParaNodeTh.h:51
class for instance data
Definition: paraInstance.h:50
virtual void interrupt()
interrupt from out side
#define THROW_LOGICAL_ERROR2(msg1, msg2)
Definition: paraDef.h:69
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
Definition: paraComm.h:79
void outputParaParamSet()
Definition: fscip.cpp:139
class BbParaNode
Definition: bbParaNode.h:61
virtual int init(UG::ParaParamSet *paraParams, int argc, char **argv)
int main(int argc, char **argv)
Definition: fscip.cpp:360
static const int Quiet
Definition: paraParamSet.h:71
static const int RampUpPhaseProcess
static int nSolvers
Definition: fscip.cpp:75
virtual void run()
static const int TagKeepRacing
Definition: bbParaTagDef.h:69
static const int ParaINT
Definition: paraComm.h:66
double memoryLimitOfSolverSCIP
Definition: fscip.cpp:71
static const int StatisticsToStdout
Definition: paraParamSet.h:77
ParaInitiator extension for SCIP solver.
class ParaTimer
Definition: paraTimer.h:48
class ParaRacingRampUpParamSet (parameter set for racing ramp-up)
void generateRacingRampUpParameterSets(int nParamSets, UG::ParaRacingRampUpParamSet **racingRampUpParamSets)
class ParaSolver
Definition: paraSolver.h:70
char ** argv
Definition: fscip.cpp:82
virtual int receive(ParaComm *comm, int source)=0
receive BbParaRacingRampUpParamSet
struct SolverThreadData_t SolverThreadData
Definition: fscip.cpp:87
class ParaTask
Definition: paraTask.h:541