X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f3b7e5f4b4d7c87ee3e8827313ec966ea8fc8387..cfbf3bda3a828313326d322fa92fb6719904d1a4:/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..03c7d542c7 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 */ -/* Copyright (c) 2009-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2021. 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. */ @@ -39,10 +39,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);