Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Const, once again.
[simgrid.git] / src / smpi / include / private.hpp
index 8087aa3..fb1f518 100644 (file)
@@ -77,7 +77,8 @@ XBT_PRIVATE simgrid::smpi::ActorExt* smpi_process();
 XBT_PRIVATE simgrid::smpi::ActorExt* smpi_process_remote(simgrid::s4u::ActorPtr actor);
 XBT_PRIVATE int smpi_get_universe_size();
 
-XBT_PRIVATE void smpi_deployment_register_process(const std::string& instance_id, int rank, simgrid::s4u::Actor* actor);
+XBT_PRIVATE void smpi_deployment_register_process(const std::string& instance_id, int rank,
+                                                  const simgrid::s4u::Actor* actor);
 XBT_PRIVATE void smpi_deployment_unregister_process(const std::string& instance_id);
 
 XBT_PRIVATE MPI_Comm* smpi_deployment_comm_world(const std::string& instance_id);
@@ -530,6 +531,15 @@ XBT_PRIVATE void private_execute_flops(double flops);
     }\
   }
 
+#define CHECK_INIT\
+  {\
+    int init_flag=0;\
+    PMPI_Initialized(&init_flag);\
+    CHECK_ARGS((!init_flag), MPI_ERR_OTHER, "%s: MPI_Init was not called !", __func__)\
+    PMPI_Finalized(&init_flag);\
+    CHECK_ARGS((init_flag), MPI_ERR_OTHER, "%s: MPI_Finalize was already called !", __func__)\
+  }
+
 #define CHECK_MPI_NULL(num, val, err, ptr)\
   CHECK_ARGS((ptr) == (val), (err),\
              "%s: param %d %s cannot be %s", __func__, (num), _XBT_STRINGIFY(ptr), _XBT_STRINGIFY(val))
@@ -559,6 +569,7 @@ XBT_PRIVATE void private_execute_flops(double flops);
 
 #define CHECK_COMM(num)\
   {\
+    CHECK_INIT\
     CHECK_COMM2((num), comm)\
     CHECK_DELETED((num), MPI_ERR_COMM, comm)\
     simgrid::smpi::utils::set_current_handle(comm);\
@@ -589,7 +600,7 @@ XBT_PRIVATE void private_execute_flops(double flops);
   {\
     CHECK_BUFFER2(num,buf,count)\
     CHECK_ARGS( simgrid::smpi::utils::get_buffer_size(buf) < (size_t)(count*datatype->get_extent()), MPI_ERR_BUFFER,\
-             "%s: param %d message size %ld exceeds buffer %s size %zu",__func__, (num), count*datatype->get_extent(), _XBT_STRINGIFY(buf), simgrid::smpi::utils::get_buffer_size(buf))\
+             "%s: param %d message size %zd exceeds buffer %s size %zu",__func__, (num), count*datatype->get_extent(), _XBT_STRINGIFY(buf), simgrid::smpi::utils::get_buffer_size(buf))\
   }
 
 #define CHECK_COUNT(num, count)\