Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove explicit conversion to std::string when it's not required.
[simgrid.git] / src / smpi / bindings / smpi_pmpi.cpp
index 842e16a..684b283 100644 (file)
@@ -4,14 +4,16 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "private.hpp"
+#include "simgrid/host.h"
 #include "simgrid/instr.h"
 #include "simgrid/s4u/Engine.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/version.h"
+#include "smpi_coll.hpp"
 #include "smpi_comm.hpp"
 #include "smpi_datatype_derived.hpp"
 #include "smpi_status.hpp"
-#include "smpi_coll.hpp"
+#include "src/kernel/EngineImpl.hpp"
 #include "src/kernel/actor/ActorImpl.hpp"
 #include "src/smpi/include/smpi_actor.hpp"
 
@@ -52,10 +54,11 @@ int PMPI_Init(int*, char***)
 
   simgrid::smpi::ActorExt::init();
   TRACE_smpi_init(simgrid::s4u::this_actor::get_pid(), __func__);
+  smpi_mpi_init();
   smpi_bench_begin();
   smpi_process()->mark_as_initialized();
 
-  smpi_mpi_init();
+  CHECK_COLLECTIVE(smpi_process()->comm_world(), "MPI_Init")
 
   return MPI_SUCCESS;
 }
@@ -63,10 +66,12 @@ int PMPI_Init(int*, char***)
 int PMPI_Finalize()
 {
   smpi_bench_end();
+  CHECK_COLLECTIVE(smpi_process()->comm_world(), "MPI_Finalize")
   aid_t rank_traced = simgrid::s4u::this_actor::get_pid();
+  smpi_process()->mark_as_finalizing();
   TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::NoOpTIData("finalize"));
 
-  if(simgrid::config::get_value<bool>("smpi/finalization-barrier"))
+  if (simgrid::config::get_value<bool>("smpi/barrier-finalization"))
     simgrid::smpi::colls::barrier(MPI_COMM_WORLD);
 
   smpi_process()->finalize();
@@ -133,7 +138,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");
   auto myself = simgrid::kernel::actor::ActorImpl::self();
   for (int i = 0; i < comm->size(); i++){
-    auto actor = simgrid::kernel::actor::ActorImpl::by_pid(comm->group()->actor(i));
+    auto actor = simgrid::kernel::EngineImpl::get_instance()->get_actor_by_pid(comm->group()->actor(i));
     if (actor != nullptr && actor != myself)
       simgrid::kernel::actor::simcall_answered([actor] { actor->exit(); });
   }
@@ -183,7 +188,7 @@ MPI_Aint PMPI_Aint_diff(MPI_Aint address, MPI_Aint disp)
 int PMPI_Get_processor_name(char *name, int *resultlen)
 {
   int len = std::min(static_cast<int>(sg_host_self()->get_name().size()), MPI_MAX_PROCESSOR_NAME - 1);
-  std::string(sg_host_self()->get_name()).copy(name, len);
+  sg_host_self()->get_name().copy(name, len);
   name[len]  = '\0';
   *resultlen = len;
 
@@ -197,10 +202,9 @@ int PMPI_Get_count(const MPI_Status * status, MPI_Datatype datatype, int *count)
   } else if (not datatype->is_valid()) {
     return MPI_ERR_TYPE;
   } else {
-    size_t size = datatype->size();
-    if (size == 0) {
+    if (datatype->size() == 0) {
       *count = 0;
-    } else if (status->count % size != 0) {
+    } else if (status->count % datatype->size() != 0) {
       *count = MPI_UNDEFINED;
     } else {
       *count = simgrid::smpi::Status::get_count(status, datatype);