From: degomme Date: Fri, 29 Mar 2019 13:57:10 +0000 (+0100) Subject: factorize X-Git-Tag: v3_22~15 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ef5b1bb2204ec20b7b0c2386500872b913ed3a4a?hp=140e8a87d2424178aca00911009e9dea815646fd factorize --- diff --git a/src/smpi/colls/smpi_coll.cpp b/src/smpi/colls/smpi_coll.cpp index 36eca5fc52..e13f8f9e9e 100644 --- a/src/smpi/colls/smpi_coll.cpp +++ b/src/smpi/colls/smpi_coll.cpp @@ -115,14 +115,7 @@ void Colls::set_collectives(){ } } - -//Implementations of the single algorith collectives - -int Colls::gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, - MPI_Datatype recvtype, int root, MPI_Comm comm) -{ - MPI_Request request; - Colls::igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm, &request); +int Colls::finish_nbc_request(MPI_Request request){ MPI_Request* requests = request->get_nbc_requests(); int count = request->get_nbc_requests_size(); Request::waitall(count, requests, MPI_STATUS_IGNORE); @@ -135,22 +128,23 @@ int Colls::gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *re return MPI_SUCCESS; } +//Implementations of the single algorith collectives + +int Colls::gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, + MPI_Datatype recvtype, int root, MPI_Comm comm) +{ + MPI_Request request; + Colls::igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm, &request); + return Colls::finish_nbc_request(request); +} + int Colls::scatterv(void *sendbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) { MPI_Request request; Colls::iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm, &request); - MPI_Request* requests = request->get_nbc_requests(); - int count = request->get_nbc_requests_size(); - Request::waitall(count, requests, MPI_STATUS_IGNORE); - for (int dst = 0; dst < count; dst++) { - if(requests[dst]!=MPI_REQUEST_NULL) - Request::unref(&requests[dst]); - } - delete[] requests; - Request::unref(&request); - return MPI_SUCCESS; + return Colls::finish_nbc_request(request); } @@ -286,18 +280,8 @@ int Colls::alltoallw(void *sendbuf, int *sendcounts, int *senddisps, MPI_Datatyp void *recvbuf, int *recvcounts, int *recvdisps, MPI_Datatype* recvtypes, MPI_Comm comm) { MPI_Request request; - int err = Colls::ialltoallw(sendbuf, sendcounts, senddisps, sendtypes, recvbuf, recvcounts, recvdisps, recvtypes, comm, &request); - MPI_Request* requests = request->get_nbc_requests(); - int count = request->get_nbc_requests_size(); - XBT_DEBUG("<%d> wait for %d requests", comm->rank(), count); - Request::waitall(count, requests, MPI_STATUS_IGNORE); - for (int i = 0; i < count; i++) { - if(requests[i]!=MPI_REQUEST_NULL) - Request::unref(&requests[i]); - } - delete[] requests; - Request::unref(&request); - return err; + Colls::ialltoallw(sendbuf, sendcounts, senddisps, sendtypes, recvbuf, recvcounts, recvdisps, recvtypes, comm, &request); + return Colls::finish_nbc_request(request); } } diff --git a/src/smpi/colls/smpi_default_selector.cpp b/src/smpi/colls/smpi_default_selector.cpp index f2751b96ef..fa89fe41e2 100644 --- a/src/smpi/colls/smpi_default_selector.cpp +++ b/src/smpi/colls/smpi_default_selector.cpp @@ -27,16 +27,7 @@ int Coll_gather_default::gather(void *sendbuf, int sendcount, MPI_Datatype sendt { MPI_Request request; Colls::igather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm, &request); - MPI_Request* requests = request->get_nbc_requests(); - int count = request->get_nbc_requests_size(); - Request::waitall(count, requests, MPI_STATUS_IGNORE); - for (int i = 0; i < count; i++) { - if(requests[i]!=MPI_REQUEST_NULL) - Request::unref(&requests[i]); - } - delete[] requests; - Request::unref(&request); - return MPI_SUCCESS; + return Colls::finish_nbc_request(request); } int Coll_reduce_scatter_default::reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, @@ -68,15 +59,7 @@ int Coll_allgather_default::allgather(void *sendbuf, int sendcount, MPI_Datatype { MPI_Request request; Colls::iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm, &request); - MPI_Request* requests = request->get_nbc_requests(); - int count = request->get_nbc_requests_size(); - Request::waitall(count, requests, MPI_STATUS_IGNORE); - for (int other = 0; other < count; other++) { - Request::unref(&requests[other]); - } - delete[] requests; - Request::unref(&request); - return MPI_SUCCESS; + return Colls::finish_nbc_request(request); } int Coll_allgatherv_default::allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, @@ -100,20 +83,9 @@ int Coll_scatter_default::scatter(void *sendbuf, int sendcount, MPI_Datatype sen { MPI_Request request; Colls::iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm, &request); - MPI_Request* requests = request->get_nbc_requests(); - int count = request->get_nbc_requests_size(); - Request::waitall(count, requests, MPI_STATUS_IGNORE); - for (int dst = 0; dst < count; dst++) { - if(requests[dst]!=MPI_REQUEST_NULL) - Request::unref(&requests[dst]); - } - delete[] requests; - Request::unref(&request); - return MPI_SUCCESS; + return Colls::finish_nbc_request(request); } - - int Coll_reduce_default::reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) { @@ -201,18 +173,8 @@ int Coll_alltoallv_default::alltoallv(void *sendbuf, int *sendcounts, int *sendd void *recvbuf, int *recvcounts, int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm) { MPI_Request request; - int err = Colls::ialltoallv(sendbuf, sendcounts, senddisps, sendtype, recvbuf, recvcounts, recvdisps, recvtype, comm, &request); - MPI_Request* requests = request->get_nbc_requests(); - int count = request->get_nbc_requests_size(); - XBT_DEBUG("<%d> wait for %d requests", comm->rank(), count); - Request::waitall(count, requests, MPI_STATUS_IGNORE); - for (int i = 0; i < count; i++) { - if(requests[i]!=MPI_REQUEST_NULL) - Request::unref(&requests[i]); - } - delete[] requests; - Request::unref(&request); - return err; + Colls::ialltoallv(sendbuf, sendcounts, senddisps, sendtype, recvbuf, recvcounts, recvdisps, recvtype, comm, &request); + return Colls::finish_nbc_request(request); } } diff --git a/src/smpi/include/smpi_coll.hpp b/src/smpi/include/smpi_coll.hpp index e4c5df3ac5..3d4223ac6d 100644 --- a/src/smpi/include/smpi_coll.hpp +++ b/src/smpi/include/smpi_coll.hpp @@ -120,6 +120,7 @@ public: int* recvdisps, MPI_Datatype* recvtypes, MPI_Comm comm); //async collectives + static int finish_nbc_request(MPI_Request request);//helper static int ibarrier(MPI_Comm comm, MPI_Request* request); static int ibcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm, MPI_Request* request);