X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f3b7e5f4b4d7c87ee3e8827313ec966ea8fc8387..3bb5446e9de29764eb8d739753c101cbb90a7b21:/src/smpi/colls/smpi_default_selector.cpp diff --git a/src/smpi/colls/smpi_default_selector.cpp b/src/smpi/colls/smpi_default_selector.cpp index 64fdcf7175..d3419b2039 100644 --- a/src/smpi/colls/smpi_default_selector.cpp +++ b/src/smpi/colls/smpi_default_selector.cpp @@ -1,6 +1,6 @@ -/* selector with default/naive Simgrid algorithms. These should not be trusted for performance evaluations */ +/* selector with default/naive SimGrid algorithms. These should not be trusted for performance evaluations */ -/* Copyright (c) 2009-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2023. The SimGrid Team. All rights reserved. */ /* 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. */ @@ -8,8 +8,7 @@ #include "colls_private.hpp" #include "src/smpi/include/smpi_actor.hpp" -namespace simgrid{ -namespace smpi{ +namespace simgrid::smpi { int bcast__default(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { @@ -39,10 +38,20 @@ int reduce_scatter__default(const void *sendbuf, void *recvbuf, const int *recvc int size = comm->size(); int count = 0; int* displs = new int[size]; + int regular=1; for (int i = 0; i < size; i++) { + if(recvcounts[i]!=recvcounts[0]){ + regular=0; + break; + } displs[i] = count; count += recvcounts[i]; } + if(not regular){ + delete[] displs; + return reduce_scatter__mpich(sendbuf, recvbuf, recvcounts, datatype, op, comm); + } + unsigned char* tmpbuf = smpi_get_tmp_sendbuffer(count * datatype->get_extent()); int ret = reduce__default(sendbuf, tmpbuf, count, datatype, op, 0, comm); @@ -67,13 +76,10 @@ int allgatherv__default(const void *sendbuf, int sendcount, MPI_Datatype sendtyp { MPI_Request request; colls::iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm, &request, 0); - 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; + auto requests = request->get_nbc_requests(); + Request::waitall(requests.size(), requests.data(), MPI_STATUS_IGNORE); + for(auto& req: requests) + Request::unref(&req); Request::unref(&request); return MPI_SUCCESS; } @@ -124,6 +130,4 @@ int alltoallv__default(const void *sendbuf, const int *sendcounts, const int *se return Request::wait(&request, MPI_STATUS_IGNORE); } -} -} - +} // namespace simgrid::smpi