X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7b47e04f1a6749e163d6dc3f76f8e1cf09fc4984..5f7e3ee3f051a31e1568c69456e83f20ff69e69f:/src/smpi/smpi_mpi.c diff --git a/src/smpi/smpi_mpi.c b/src/smpi/smpi_mpi.c index 8fdb8a12e2..1a2c3f3858 100644 --- a/src/smpi/smpi_mpi.c +++ b/src/smpi/smpi_mpi.c @@ -189,26 +189,20 @@ int MPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm co int retval = MPI_SUCCESS; int rank; + smpi_mpi_request_t request; smpi_bench_end(); rank = smpi_mpi_comm_rank(comm); if (rank == root) { - int i; - smpi_mpi_request_t *requests = xbt_new(smpi_mpi_request_t, comm->size - 1); - for (i = 1; i < comm->size; i++) { - retval = smpi_create_request(buf, count, datatype, root, (root + i) % comm->size, 0, comm, requests + i - 1); - smpi_mpi_isend(requests[i - 1]); - } - for (i = 0; i < comm->size - 1; i++) { - smpi_mpi_wait(requests[i], MPI_STATUS_IGNORE); - xbt_mallocator_release(smpi_global->request_mallocator, requests[i]); - } - xbt_free(requests); + retval = smpi_create_request(buf, count, datatype, root, (root + 1) % comm->size, 0, comm, &request); + request->forward = comm->size - 1; + smpi_mpi_isend(request); + smpi_mpi_wait(request, MPI_STATUS_IGNORE); + xbt_mallocator_release(smpi_global->request_mallocator, request); } else { - smpi_mpi_request_t request; - retval = smpi_create_request(buf, count, datatype, root, rank, 0, comm, &request); + retval = smpi_create_request(buf, count, datatype, MPI_ANY_SOURCE, rank, 0, comm, &request); smpi_mpi_irecv(request); smpi_mpi_wait(request, MPI_STATUS_IGNORE); xbt_mallocator_release(smpi_global->request_mallocator, request);