X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/033eb0461ca0bc73eff29615c388a81fb5bd80e8..c4000f89d4644c3d7ff6187a62a0930c4d53e683:/src/smpi/mpi/smpi_datatype.cpp diff --git a/src/smpi/mpi/smpi_datatype.cpp b/src/smpi/mpi/smpi_datatype.cpp index 52cbbf395c..f943415abb 100644 --- a/src/smpi/mpi/smpi_datatype.cpp +++ b/src/smpi/mpi/smpi_datatype.cpp @@ -9,10 +9,11 @@ #include "smpi_datatype_derived.hpp" #include "smpi_op.hpp" #include "smpi_process.hpp" +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_datatype, smpi, "Logging specific to SMPI (datatype)"); -static std::unordered_map id2type_lookup; +static std::unordered_map 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 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 @@ -207,12 +208,12 @@ const char* Datatype::encode(MPI_Datatype dt) if (dt == MPI_DATATYPE_NULL) return "-1"; - return std::to_string(dt->id).c_str(); + 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() @@ -293,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 */ @@ -529,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; @@ -544,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]; @@ -567,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);