X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/033eb0461ca0bc73eff29615c388a81fb5bd80e8..0afa6f83db585564c38145f745a2e52bd5cb3740:/src/smpi/mpi/smpi_datatype.cpp diff --git a/src/smpi/mpi/smpi_datatype.cpp b/src/smpi/mpi/smpi_datatype.cpp index 52cbbf395c..5136911deb 100644 --- a/src/smpi/mpi/smpi_datatype.cpp +++ b/src/smpi/mpi/smpi_datatype.cpp @@ -4,15 +4,17 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include "simgrid/modelchecker.h" #include "private.hpp" +#include "simgrid/modelchecker.h" #include "smpi_datatype_derived.hpp" #include "smpi_op.hpp" -#include "smpi_process.hpp" +#include "src/smpi/include/smpi_actor.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 */ \ @@ -73,8 +75,9 @@ CREATE_MPI_DATATYPE(MPI_2LONG, 37, long_long); 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(MPI_REAL8, 40, double); +CREATE_MPI_DATATYPE(MPI_REAL16, 41, long 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 +100,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 +112,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 @@ -204,15 +207,12 @@ bool Datatype::is_basic() 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 +293,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 +529,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 +544,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 +567,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);