Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Convert enum class SmpiPrivStrategies tu upper case.
[simgrid.git] / src / smpi / mpi / smpi_datatype.cpp
index 8729d75..5e752c1 100644 (file)
@@ -9,10 +9,11 @@
 #include "smpi_datatype_derived.hpp"
 #include "smpi_op.hpp"
 #include "smpi_process.hpp"
+#include <string>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_datatype, smpi, "Logging specific to SMPI (datatype)");
 
-static std::unordered_map<int, simgrid::smpi::Datatype*> id2type_lookup;
+static std::unordered_map<std::string, simgrid::smpi::Datatype*> id2type_lookup;
 
 #define CREATE_MPI_DATATYPE(name, id, type)                                                                            \
   static simgrid::smpi::Datatype mpi_##name((char*)#name, id, sizeof(type), /* size */                                 \
@@ -97,9 +98,9 @@ namespace smpi{
 
 std::unordered_map<int, smpi_key_elem> Datatype::keyvals_; // required by the Keyval class implementation
 int Datatype::keyval_id_=0; // required by the Keyval class implementation
-Datatype::Datatype(int id, int size, MPI_Aint lb, MPI_Aint ub, int flags) : Datatype(size, lb, ub, flags)
+Datatype::Datatype(int ident, int size, MPI_Aint lb, MPI_Aint ub, int flags) : Datatype(size, lb, ub, flags)
 {
-  id = id;
+  id = std::to_string(ident);
 }
 Datatype::Datatype(int size,MPI_Aint lb, MPI_Aint ub, int flags) : name_(nullptr), size_(size), lb_(lb), ub_(ub), flags_(flags), refcount_(1){
 #if SIMGRID_HAVE_MC
@@ -109,8 +110,8 @@ Datatype::Datatype(int size,MPI_Aint lb, MPI_Aint ub, int flags) : name_(nullptr
 }
 
 //for predefined types, so in_use = 0.
-Datatype::Datatype(char* name, int id, int size, MPI_Aint lb, MPI_Aint ub, int flags)
-    : name_(name), id(id), size_(size), lb_(lb), ub_(ub), flags_(flags), refcount_(0)
+Datatype::Datatype(char* name, int ident, int size, MPI_Aint lb, MPI_Aint ub, int flags)
+    : name_(name), id(std::to_string(ident)), size_(size), lb_(lb), ub_(ub), flags_(flags), refcount_(0)
 {
   id2type_lookup.insert({id, this});
 #if SIMGRID_HAVE_MC
@@ -202,14 +203,17 @@ bool Datatype::is_basic()
   return (flags_ & DT_FLAG_BASIC);
 }
 
-const char* Datatype::encode()
+const char* Datatype::encode(MPI_Datatype dt)
 {
-  return std::to_string(id).c_str();
+  if (dt == MPI_DATATYPE_NULL)
+    return "-1";
+
+  return dt->id.c_str();
 }
 
-MPI_Datatype Datatype::decode(const char* const datatype_id)
+MPI_Datatype Datatype::decode(std::string datatype_id)
 {
-  return id2type_lookup.find(std::stoi(datatype_id))->second;
+  return id2type_lookup.find(datatype_id)->second;
 }
 
 bool Datatype::is_replayable()
@@ -290,7 +294,7 @@ int Datatype::copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 
 // FIXME Handle the case of a partial shared malloc.
 
-  if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){
+  if (smpi_privatize_global_variables == SmpiPrivStrategies::MMAP) {
     smpi_switch_data_segment(simgrid::s4u::Actor::self());
   }
   /* First check if we really have something to do */
@@ -526,7 +530,7 @@ int Datatype::create_subarray(int ndims, int* array_of_sizes,
       return MPI_ERR_ARG;
     }
   }
-  
+
   MPI_Aint extent = oldtype->get_extent();
 
   int i;
@@ -541,7 +545,7 @@ int Datatype::create_subarray(int ndims, int* array_of_sizes,
       step = 1;
       end = ndims;
   }
-  
+
   MPI_Aint size = (MPI_Aint)array_of_sizes[i] * (MPI_Aint)array_of_sizes[i+step];
   MPI_Aint lb = (MPI_Aint)array_of_starts[i] + (MPI_Aint)array_of_starts[i+step] *(MPI_Aint)array_of_sizes[i];
 
@@ -564,7 +568,7 @@ int Datatype::create_subarray(int ndims, int* array_of_sizes,
   //handle LB and UB with a resized call
   create_hindexed( 1, sizes, lbs, tmp, newtype);
   unref(tmp);
-  
+
   tmp = *newtype;
   create_resized(tmp, 0, extent, newtype);