Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add flag to provide an optional barrier in MPI_Finalize.
authorAugustin Degomme <adegomme@users.noreply.github.com>
Thu, 27 May 2021 13:40:44 +0000 (15:40 +0200)
committerAugustin Degomme <adegomme@users.noreply.github.com>
Thu, 27 May 2021 14:35:05 +0000 (16:35 +0200)
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.

src/smpi/bindings/smpi_pmpi.cpp
src/smpi/internals/smpi_config.cpp

index 7281ab2..ffe62aa 100644 (file)
@@ -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<bool>("smpi/finalization-barrier"))
+    simgrid::smpi::colls::barrier(MPI_COMM_WORLD);
+
   smpi_process()->finalize();
 
   TRACE_smpi_comm_out(rank_traced);
index bab79ce..7d640a1 100644 (file)
@@ -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<std::string>(
       "smpi/or", "Small messages timings (MPI_Recv minimum time for small messages)", "0:0:0:0:0");
+
+  simgrid::config::declare_flag<bool>("smpi/finalization-barrier", "Do we add a barrier in MPI_Finalize or not", false);
+
   _smpi_options_initialized=true;
 }