X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b0ebbb89e434f546d7e9aa2e07512afeed3982b..4ba85316ab090c9e1fb26e988dc80dd5c4535bd8:/src/smpi/mpi/smpi_datatype.cpp diff --git a/src/smpi/mpi/smpi_datatype.cpp b/src/smpi/mpi/smpi_datatype.cpp index b738b7ba33..d60ea40d3e 100644 --- a/src/smpi/mpi/smpi_datatype.cpp +++ b/src/smpi/mpi/smpi_datatype.cpp @@ -193,6 +193,17 @@ bool Datatype::is_valid(){ return (flags_ & DT_FLAG_COMMITED); } +bool Datatype::is_basic() +{ + return (flags_ & DT_FLAG_BASIC); +} + +bool Datatype::is_replayable() +{ + return ((this==MPI_BYTE)||(this==MPI_DOUBLE)||(this==MPI_INT)|| + (this==MPI_CHAR)||(this==MPI_SHORT)||(this==MPI_LONG)||(this==MPI_FLOAT)); +} + size_t Datatype::size(){ return size_; } @@ -266,7 +277,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){ - smpi_switch_data_segment(smpi_process()->index()); + smpi_switch_data_segment(simgrid::s4u::Actor::self()->getPid()); } /* First check if we really have something to do */ if (recvcount > 0 && recvbuf != sendbuf) { @@ -278,9 +289,9 @@ int Datatype::copy(void *sendbuf, int sendcount, MPI_Datatype sendtype, if (not smpi_process()->replaying()) memcpy(recvbuf, sendbuf, count); } else if (not(sendtype->flags() & DT_FLAG_DERIVED)) { - recvtype->unserialize( sendbuf, recvbuf, recvcount/recvtype->size(), MPI_REPLACE); + recvtype->unserialize(sendbuf, recvbuf, count / recvtype->size(), MPI_REPLACE); } else if (not(recvtype->flags() & DT_FLAG_DERIVED)) { - sendtype->serialize(sendbuf, recvbuf, sendcount/sendtype->size()); + sendtype->serialize(sendbuf, recvbuf, count / sendtype->size()); }else{ void * buf_tmp = xbt_malloc(count);