From: Augustin Degomme Date: Thu, 27 May 2021 13:40:44 +0000 (+0200) Subject: Add flag to provide an optional barrier in MPI_Finalize. X-Git-Tag: v3.28~216 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/4f73307dec9bb2568a4fc8df9fd8ea5c988a2b2a Add flag to provide an optional barrier in MPI_Finalize. This is meant to help for codes which can aggressively cleanup memory at finalization, while other processes still have to use it. For example when attributes are attached to a local communicator, in SMPI this communicator may be cleaned up by another process in the end, and the attribute has to still be valid at this point. This was an issue with PETSC, for example. --- diff --git a/src/smpi/bindings/smpi_pmpi.cpp b/src/smpi/bindings/smpi_pmpi.cpp index 7281ab22d1..ffe62aadef 100644 --- a/src/smpi/bindings/smpi_pmpi.cpp +++ b/src/smpi/bindings/smpi_pmpi.cpp @@ -11,6 +11,7 @@ #include "smpi_comm.hpp" #include "smpi_datatype_derived.hpp" #include "smpi_status.hpp" +#include "smpi_coll.hpp" #include "src/kernel/actor/ActorImpl.hpp" #include "src/smpi/include/smpi_actor.hpp" @@ -66,6 +67,9 @@ int PMPI_Finalize() aid_t rank_traced = simgrid::s4u::this_actor::get_pid(); TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::NoOpTIData("finalize")); + if(simgrid::config::get_value("smpi/finalization-barrier")) + simgrid::smpi::colls::barrier(MPI_COMM_WORLD); + smpi_process()->finalize(); TRACE_smpi_comm_out(rank_traced); diff --git a/src/smpi/internals/smpi_config.cpp b/src/smpi/internals/smpi_config.cpp index bab79ce9de..7d640a1d72 100644 --- a/src/smpi/internals/smpi_config.cpp +++ b/src/smpi/internals/smpi_config.cpp @@ -254,6 +254,9 @@ void smpi_init_options(){ "smpi/ois", "Small messages timings (MPI_Isend minimum time for small messages)", "0:0:0:0:0"); simgrid::config::declare_flag( "smpi/or", "Small messages timings (MPI_Recv minimum time for small messages)", "0:0:0:0:0"); + + simgrid::config::declare_flag("smpi/finalization-barrier", "Do we add a barrier in MPI_Finalize or not", false); + _smpi_options_initialized=true; }