Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
small simplification of MPI initialization
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Thu, 1 Aug 2019 04:45:53 +0000 (06:45 +0200)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Thu, 1 Aug 2019 04:45:53 +0000 (06:45 +0200)
src/smpi/bindings/smpi_pmpi.cpp
src/smpi/internals/smpi_global.cpp
src/smpi/internals/smpi_replay.cpp

index 933894a..a57e4b1 100644 (file)
@@ -36,20 +36,18 @@ int PMPI_Init(int*, char***)
   xbt_assert(simgrid::s4u::Engine::is_initialized(),
              "Your MPI program was not properly initialized. The easiest is to use smpirun to start it.");
 
-  // Init is called only once per SMPI process
-  if (not smpi_process()->initializing()){
-    simgrid::smpi::ActorExt::init();
-  }
-  if (not smpi_process()->initialized()){
-    int rank_traced = simgrid::s4u::this_actor::get_pid();
-    TRACE_smpi_init(rank_traced);
-    TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::NoOpTIData("init"));
-    TRACE_smpi_comm_out(rank_traced);
-    TRACE_smpi_computing_init(rank_traced);
-    TRACE_smpi_sleeping_init(rank_traced);
-    smpi_bench_begin();
-    smpi_process()->mark_as_initialized();
-  }
+  xbt_assert(not smpi_process()->initializing());
+  xbt_assert(not smpi_process()->initialized());
+
+  simgrid::smpi::ActorExt::init();
+  int rank_traced = simgrid::s4u::this_actor::get_pid();
+  TRACE_smpi_init(rank_traced);
+  TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::NoOpTIData("init"));
+  TRACE_smpi_comm_out(rank_traced);
+  TRACE_smpi_computing_init(rank_traced);
+  TRACE_smpi_sleeping_init(rank_traced);
+  smpi_bench_begin();
+  smpi_process()->mark_as_initialized();
 
   smpi_mpi_init();
 
index 9685751..17e62ba 100644 (file)
@@ -425,7 +425,6 @@ static int smpi_run_entry_point(const F& entry_point, const std::string& executa
   args4argv->push_back(nullptr);
   char** argv = args4argv->data();
 
-  simgrid::smpi::ActorExt::init();
 #if SMPI_IFORT
   for_rtl_init_ (&argc, argv);
 #elif SMPI_FLANG
index 9d3aae3..464ba2c 100644 (file)
@@ -707,11 +707,12 @@ static std::unordered_map<aid_t, simgrid::smpi::replay::RequestStorage> storage;
 /** @brief Only initialize the replay, don't do it for real */
 void smpi_replay_init(const char* instance_id, int rank, double start_delay_flops)
 {
-  if (not smpi_process()->initializing()){
-    simgrid::s4u::Actor::self()->set_property("instance_id", instance_id);
-    simgrid::s4u::Actor::self()->set_property("rank", std::to_string(rank));
-    simgrid::smpi::ActorExt::init();
-  }
+  xbt_assert(not smpi_process()->initializing());
+
+  simgrid::s4u::Actor::self()->set_property("instance_id", instance_id);
+  simgrid::s4u::Actor::self()->set_property("rank", std::to_string(rank));
+  simgrid::smpi::ActorExt::init();
+
   smpi_process()->mark_as_initialized();
   smpi_process()->set_replaying(true);