X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dacc7f742e213df2a54511bfc5dc7b350987b014..0d0eac5662fe95b83963adb113e94504a1184e7c:/src/smpi/mpi/smpi_datatype.cpp diff --git a/src/smpi/mpi/smpi_datatype.cpp b/src/smpi/mpi/smpi_datatype.cpp index 8729d75b73..3c04c85e39 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 */ \ @@ -75,6 +76,7 @@ CREATE_MPI_DATATYPE(MPI_REAL, 38, float); CREATE_MPI_DATATYPE(MPI_REAL4, 39, float); CREATE_MPI_DATATYPE(MPI_REAL8, 40, float); CREATE_MPI_DATATYPE(MPI_REAL16, 41, double); +CREATE_MPI_DATATYPE_NULL(MPI_DATATYPE_NULL, -1); CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX8, 42); CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX16, 43); CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX32, 44); @@ -97,9 +99,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 +111,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 +204,14 @@ 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(); + 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 +292,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 +528,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 +543,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 +566,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);