X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b688c83e1d48eda7a3392c2a7f0c3c540e77f7d..6e9a112fec4d147bad69a3062bfef3a4040cb55c:/src/smpi/colls/alltoall-simple.c diff --git a/src/smpi/colls/alltoall-simple.c b/src/smpi/colls/alltoall-simple.c index b8c72540ca..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,21 +49,18 @@ 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; - } - } else - req = 0; + req = (MPI_Request *) xbt_malloc(nreqs * sizeof(MPI_Request)); + statuses = (MPI_Status *) xbt_malloc(nreqs * sizeof(MPI_Status)); + } else { + req = NULL; + statuses = NULL; + } /* simple optimization */ 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); @@ -80,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); - - if (err != MPI_SUCCESS) { - if (req) - free((char *) req); - return err; - } + smpi_mpi_waitall(nreqs, req, statuses); - 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; }