Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add flag to provide an optional barrier in MPI_Finalize.
[simgrid.git] / src / smpi / bindings / smpi_pmpi.cpp
index 744b0a3..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"
 
@@ -51,8 +52,7 @@ int PMPI_Init(int*, char***)
   }
 
   simgrid::smpi::ActorExt::init();
-  int rank_traced = simgrid::s4u::this_actor::get_pid();
-  TRACE_smpi_init(rank_traced, __func__);
+  TRACE_smpi_init(simgrid::s4u::this_actor::get_pid(), __func__);
   smpi_bench_begin();
   smpi_process()->mark_as_initialized();
 
@@ -64,9 +64,12 @@ int PMPI_Init(int*, char***)
 int PMPI_Finalize()
 {
   smpi_bench_end();
-  int rank_traced = simgrid::s4u::this_actor::get_pid();
+  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);
@@ -131,7 +134,7 @@ int PMPI_Abort(MPI_Comm comm, int /*errorcode*/)
   XBT_WARN("MPI_Abort was called, something went probably wrong in this simulation ! Killing all processes sharing the same MPI_COMM_WORLD");
   smx_actor_t myself = SIMIX_process_self();
   for (int i = 0; i < comm->size(); i++){
-    smx_actor_t actor = simgrid::kernel::actor::ActorImpl::by_pid(comm->group()->actor_pid(i));
+    smx_actor_t actor = simgrid::kernel::actor::ActorImpl::by_pid(comm->group()->actor(i));
     if (actor != nullptr && actor != myself)
       simgrid::kernel::actor::simcall([actor] { actor->exit(); });
   }