From: degomme Date: Tue, 13 Mar 2018 17:12:43 +0000 (+0100) Subject: better handling of sendrecv when MPI_PROC_NULL is either src or dst X-Git-Tag: v3.19~62 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/49917b46ab016e69fcc807dffa1f836046a29362 better handling of sendrecv when MPI_PROC_NULL is either src or dst --- diff --git a/src/smpi/bindings/smpi_pmpi_request.cpp b/src/smpi/bindings/smpi_pmpi_request.cpp index 6690dfca51..88a59c8e16 100644 --- a/src/smpi/bindings/smpi_pmpi_request.cpp +++ b/src/smpi/bindings/smpi_pmpi_request.cpp @@ -396,10 +396,20 @@ int PMPI_Sendrecv(void* sendbuf, int sendcount, MPI_Datatype sendtype, int dst, retval = MPI_ERR_COMM; } else if (not sendtype->is_valid() || not recvtype->is_valid()) { retval = MPI_ERR_TYPE; - } else if (src == MPI_PROC_NULL || dst == MPI_PROC_NULL) { - simgrid::smpi::Status::empty(status); - status->MPI_SOURCE = MPI_PROC_NULL; + } else if (src == MPI_PROC_NULL && dst == MPI_PROC_NULL) { + if(status!=MPI_STATUS_IGNORE){ + simgrid::smpi::Status::empty(status); + status->MPI_SOURCE = MPI_PROC_NULL; + } retval = MPI_SUCCESS; + }else if (src == MPI_PROC_NULL){ + if(status!=MPI_STATUS_IGNORE){ + simgrid::smpi::Status::empty(status); + status->MPI_SOURCE = MPI_PROC_NULL; + } + return PMPI_Send(sendbuf, sendcount, sendtype, dst, sendtag, comm); + }else if (dst == MPI_PROC_NULL){ + return PMPI_Recv(recvbuf, recvcount, recvtype, src, recvtag, comm, status); }else if (dst >= comm->group()->size() || dst <0 || (src!=MPI_ANY_SOURCE && (src >= comm->group()->size() || src <0))){ retval = MPI_ERR_RANK;