From d0880f413b370c3455ef5aaeb35e77f7f7599de4 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Thu, 18 Feb 2021 01:11:32 +0100 Subject: [PATCH] the naive legacy (default) reduce_scatter did not work really well with different sizes for each process. --- src/smpi/colls/smpi_default_selector.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/smpi/colls/smpi_default_selector.cpp b/src/smpi/colls/smpi_default_selector.cpp index febd2e363c..d3c2fcb815 100644 --- a/src/smpi/colls/smpi_default_selector.cpp +++ b/src/smpi/colls/smpi_default_selector.cpp @@ -39,10 +39,18 @@ 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; + continue; + } displs[i] = count; count += recvcounts[i]; } + if(not regular) + return reduce_scatter__ompi(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); -- 2.20.1