From c215dd07037da91b2ef809d788e0535ba9a43789 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Thu, 1 Aug 2019 06:45:53 +0200 Subject: [PATCH] small simplification of MPI initialization --- src/smpi/bindings/smpi_pmpi.cpp | 26 ++++++++++++-------------- src/smpi/internals/smpi_global.cpp | 1 - src/smpi/internals/smpi_replay.cpp | 11 ++++++----- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/smpi/bindings/smpi_pmpi.cpp b/src/smpi/bindings/smpi_pmpi.cpp index 933894a518..a57e4b1dad 100644 --- a/src/smpi/bindings/smpi_pmpi.cpp +++ b/src/smpi/bindings/smpi_pmpi.cpp @@ -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(); diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 96857513df..17e62ba88b 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -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 diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index 9d3aae32a4..464ba2cfc3 100644 --- a/src/smpi/internals/smpi_replay.cpp +++ b/src/smpi/internals/smpi_replay.cpp @@ -707,11 +707,12 @@ static std::unordered_map 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); -- 2.20.1