X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/25fd5bf34caebe9efb725c743c7c4e0319c46ad2..0efcdbcf5699fd083152350d0cebd5c1fe356751:/src/smpi/colls/alltoall-simple.c?ds=sidebyside diff --git a/src/smpi/colls/alltoall-simple.c b/src/smpi/colls/alltoall-simple.c index 90e1c724ed..fa50a8c2eb 100644 --- a/src/smpi/colls/alltoall-simple.c +++ b/src/smpi/colls/alltoall-simple.c @@ -1,4 +1,4 @@ -#include "colls.h" +#include "colls_private.h" /***************************************************************************** @@ -25,10 +25,9 @@ int smpi_coll_tuned_alltoall_simple(void *send_buff, int send_count, MPI_Datatype send_type, void *recv_buff, int recv_count, - MPI_Datatype recv_type, - MPI_Comm comm) + MPI_Datatype recv_type, MPI_Comm comm) { - int i, rank, size, nreqs, err, src, dst, tag = 101; + int i, rank, size, nreqs, src, dst, tag = 101; char *psnd; char *prcv; MPI_Aint sndinc; @@ -39,10 +38,10 @@ int smpi_coll_tuned_alltoall_simple(void *send_buff, int send_count, MPI_Status s, *statuses; - MPI_Comm_size(comm, &size); - MPI_Comm_rank(comm, &rank); - MPI_Type_extent(send_type, &sndinc); - MPI_Type_extent(recv_type, &rcvinc); + size = smpi_comm_size(comm); + rank = smpi_comm_rank(comm); + sndinc = smpi_datatype_get_extent(send_type); + rcvinc = smpi_datatype_get_extent(recv_type); sndinc *= send_count; rcvinc *= recv_count; @@ -50,13 +49,8 @@ int smpi_coll_tuned_alltoall_simple(void *send_buff, int send_count, nreqs = 2 * (size - 1); if (nreqs > 0) { - req = (MPI_Request *) malloc(nreqs * sizeof(MPI_Request)); - statuses = (MPI_Status *) malloc(nreqs * sizeof(MPI_Status)); - if (!req || !statuses) { - free(req); - free(statuses); - return 0; - } + req = (MPI_Request *) xbt_malloc(nreqs * sizeof(MPI_Request)); + statuses = (MPI_Status *) xbt_malloc(nreqs * sizeof(MPI_Status)); } else { req = NULL; statuses = NULL; @@ -66,7 +60,7 @@ int smpi_coll_tuned_alltoall_simple(void *send_buff, int send_count, psnd = ((char *) send_buff) + (rank * sndinc); prcv = ((char *) recv_buff) + (rank * rcvinc); - MPI_Sendrecv(psnd, send_count, send_type, rank, tag, + smpi_mpi_sendrecv(psnd, send_count, send_type, rank, tag, prcv, recv_count, recv_type, rank, tag, comm, &s); @@ -82,42 +76,26 @@ int smpi_coll_tuned_alltoall_simple(void *send_buff, int send_count, continue; if (dst == rank) continue; - MPI_Recv_init(prcv + (src * rcvinc), recv_count, recv_type, src, - tag, comm, preq++); - MPI_Send_init(psnd + (dst * sndinc), send_count, send_type, dst, - tag, comm, qreq++); + *(preq++) = smpi_mpi_recv_init(prcv + (src * rcvinc), recv_count, recv_type, src, + tag, comm); + *(qreq++) = smpi_mpi_send_init(psnd + (dst * sndinc), send_count, send_type, dst, + tag, comm); } /* Start all the requests. */ - err = MPI_Startall(nreqs, req); + smpi_mpi_startall(nreqs, req); /* Wait for them all. */ - err = MPI_Waitall(nreqs, req, statuses); + smpi_mpi_waitall(nreqs, req, statuses); - if (err != MPI_SUCCESS) { - if (req) - free((char *) req); - return err; - } - - for (i = 0, preq = req; i < nreqs; ++i, ++preq) { - err = MPI_Request_free(preq); - if (err != MPI_SUCCESS) { - if (req) - free((char *) req); - if (statuses) - free(statuses); - return err; - } - } /* All done */ if (req) - free((char *) req); + xbt_free((char *) req); if (statuses) - free(statuses); - return (1); + xbt_free(statuses); + return MPI_SUCCESS; }