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 8764f14..684b283 100644 (file)
@@ -4,6 +4,7 @@
  * 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"
@@ -53,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;
 }
@@ -64,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();
@@ -184,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;
 
@@ -198,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);