X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7ce270272856fcab2790a35bcefb9d6e0fb52423..e2093200437e2b32ece25429c4ce43c2ba1ffde5:/src/smpi/colls/alltoall-simple.c diff --git a/src/smpi/colls/alltoall-simple.c b/src/smpi/colls/alltoall-simple.c index df2be4e102..1d813e4013 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" /***************************************************************************** @@ -22,13 +22,12 @@ * Auther: Ahmad Faraj ****************************************************************************/ -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) +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) { - int i, rank, size, nreqs, err, src, dst, tag = 101; + int i, rank, size, nreqs, src, dst, tag = COLL_TAG_ALLTOALL; char *psnd; char *prcv; MPI_Aint sndinc; @@ -36,91 +35,67 @@ smpi_coll_tuned_alltoall_simple(void * send_buff, int send_count, MPI_Request *req; MPI_Request *preq; MPI_Request *qreq; - MPI_Status s, * statuses; + 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; /* Allocate arrays of requests. */ 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; + if (nreqs > 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, - prcv, recv_count, recv_type, - rank, tag, comm, &s); + smpi_mpi_sendrecv(psnd, send_count, send_type, rank, tag, + prcv, recv_count, recv_type, rank, tag, comm, &s); /* Initiate all send/recv to/from others. */ preq = req; qreq = req + size - 1; - prcv = (char*) recv_buff; - psnd = (char*) send_buff; - for (i = 0; i < size; i++) - { - src = dst = (rank + i) % size; - if (src == rank) 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++); - } + prcv = (char *) recv_buff; + psnd = (char *) send_buff; + for (i = 0; i < size; i++) { + src = dst = (rank + i) % size; + if (src == rank) + continue; + if (dst == rank) + continue; + *(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 */ - + for(i= 0;i