X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d656f9465e7b1c36319f86eeafdcec58fe9551a4..ea74f5d95928a521a588737e81f1de94eef25d19:/src/smpi/colls/allgather/allgather-NTSLR-NB.cpp?ds=sidebyside diff --git a/src/smpi/colls/allgather/allgather-NTSLR-NB.cpp b/src/smpi/colls/allgather/allgather-NTSLR-NB.cpp index bf07ba83e0..764c7ac96e 100644 --- a/src/smpi/colls/allgather/allgather-NTSLR-NB.cpp +++ b/src/smpi/colls/allgather/allgather-NTSLR-NB.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2017. The SimGrid Team. +/* Copyright (c) 2013-2022. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -9,12 +9,11 @@ namespace simgrid{ namespace smpi{ - -// Allgather-Non-Topoloty-Scecific-Logical-Ring algorithm +// Allgather-Non-Topology-Specific-Logical-Ring algorithm int -Coll_allgather_NTSLR_NB::allgather(void *sbuf, int scount, MPI_Datatype stype, - void *rbuf, int rcount, MPI_Datatype rtype, - MPI_Comm comm) +allgather__NTSLR_NB(const void *sbuf, int scount, MPI_Datatype stype, + void *rbuf, int rcount, MPI_Datatype rtype, + MPI_Comm comm) { MPI_Aint rextent, sextent; MPI_Status status, status2; @@ -26,15 +25,10 @@ Coll_allgather_NTSLR_NB::allgather(void *sbuf, int scount, MPI_Datatype stype, size = comm->size(); rextent = rtype->get_extent(); sextent = stype->get_extent(); - MPI_Request *rrequest_array; - MPI_Request *srequest_array; - rrequest_array = (MPI_Request *) xbt_malloc(size * sizeof(MPI_Request)); - srequest_array = (MPI_Request *) xbt_malloc(size * sizeof(MPI_Request)); - // irregular case use default MPI fucntions if (scount * sextent != rcount * rextent) { - XBT_WARN("MPI_allgather_NTSLR_NB use default MPI_allgather."); - Coll_allgather_default::allgather(sbuf, scount, stype, rbuf, rcount, rtype, comm); + XBT_INFO("MPI_allgather_NTSLR_NB: irregular case, use default MPI_allgather."); + allgather__default(sbuf, scount, stype, rbuf, rcount, rtype, comm); return MPI_SUCCESS; } @@ -52,6 +46,9 @@ Coll_allgather_NTSLR_NB::allgather(void *sbuf, int scount, MPI_Datatype stype, //start sending logical ring message int increment = scount * sextent; + auto* rrequest_array = new MPI_Request[size]; + auto* srequest_array = new MPI_Request[size]; + //post all irecv first for (i = 0; i < size - 1; i++) { recv_offset = ((rank - i - 1 + size) % size) * increment; @@ -66,8 +63,8 @@ Coll_allgather_NTSLR_NB::allgather(void *sbuf, int scount, MPI_Datatype stype, Request::wait(&srequest_array[i], &status2); } - free(rrequest_array); - free(srequest_array); + delete[] rrequest_array; + delete[] srequest_array; return MPI_SUCCESS; }