diff --git a/src/mca/coll/basic/src/coll_basic_allgather.c b/src/mca/coll/basic/src/coll_basic_allgather.c index 6d484845c1..2239db2cba 100644 --- a/src/mca/coll/basic/src/coll_basic_allgather.c +++ b/src/mca/coll/basic/src/coll_basic_allgather.c @@ -104,7 +104,7 @@ int mca_coll_basic_allgather_inter(void *sbuf, int scount, return err; } - err = mca_pml.pml_wait(1, &req, NULL, MPI_STATUS_IGNORE); + err = mca_pml.pml_wait_all(1, &req, MPI_STATUS_IGNORE); if (OMPI_SUCCESS != err ) { return err; } @@ -156,7 +156,7 @@ int mca_coll_basic_allgather_inter(void *sbuf, int scount, goto exit; } - err = mca_pml.pml_wait(1, &req, NULL, MPI_STATUS_IGNORE); + err = mca_pml.pml_wait_all(1, &req, MPI_STATUS_IGNORE); if (OMPI_SUCCESS != err ) { goto exit; } diff --git a/src/mca/coll/basic/src/coll_basic_allgatherv.c b/src/mca/coll/basic/src/coll_basic_allgatherv.c index 113239627f..605ce84ff9 100644 --- a/src/mca/coll/basic/src/coll_basic_allgatherv.c +++ b/src/mca/coll/basic/src/coll_basic_allgatherv.c @@ -59,20 +59,22 @@ int mca_coll_basic_allgatherv_inter(void *sbuf, int scount, struct ompi_communicator_t *comm) { int size, rsize; - int err; + int err, i; int *scounts=NULL; int *sdisps=NULL; rsize = ompi_comm_remote_size (comm); size = ompi_comm_size (comm); - scounts = (int *) calloc (rsize, sizeof(int) ); + scounts = (int *) malloc (rsize * sizeof(int) ); sdisps = (int *) calloc (rsize, sizeof(int)); if ( NULL == scounts || NULL == sdisps ) { return err; } - scounts[0] = scount; + for ( i=0; ic_coll.coll_alltoallv (sbuf, scounts, sdisps, sdtype, rbuf, rcounts, disps, rdtype, diff --git a/src/mca/coll/basic/src/coll_basic_alltoall.c b/src/mca/coll/basic/src/coll_basic_alltoall.c index 799f25e0ed..483151f63b 100644 --- a/src/mca/coll/basic/src/coll_basic_alltoall.c +++ b/src/mca/coll/basic/src/coll_basic_alltoall.c @@ -189,28 +189,23 @@ int mca_coll_basic_alltoall_inter(void *sbuf, int scount, /* Post all receives first */ for (i = 0; i < size; i++, ++rreq) { - err = mca_pml.pml_irecv_init(prcv + (i * rcvinc), rcount, rdtype, i, + err = mca_pml.pml_irecv(prcv + (i * rcvinc), rcount, rdtype, i, MCA_COLL_BASE_TAG_ALLTOALL, comm, rreq); - if (MPI_SUCCESS != err) { - mca_coll_basic_free_reqs(req, rreq - req); + if (OMPI_SUCCESS != err) { return err; } } /* Now post all sends */ for (i = 0; i < size; i++, ++sreq) { - err = mca_pml.pml_isend_init(psnd + (i * sndinc), scount, sdtype, i, - MCA_COLL_BASE_TAG_ALLTOALL, - MCA_PML_BASE_SEND_STANDARD, comm, sreq); - if (MPI_SUCCESS != err) { - mca_coll_basic_free_reqs(req, sreq - req); + err = mca_pml.pml_isend(psnd + (i * sndinc), scount, sdtype, i, + MCA_COLL_BASE_TAG_ALLTOALL, + MCA_PML_BASE_SEND_STANDARD, comm, sreq); + if (OMPI_SUCCESS != err) { return err; } } - /* Start your engines. This will never return an error. */ - mca_pml.pml_start(nreqs, req); - /* Wait for them all. If there's an error, note that we don't care what the error was -- just that there *was* an error. The PML will finish all requests, even if one or more of them fail. @@ -219,9 +214,6 @@ int mca_coll_basic_alltoall_inter(void *sbuf, int scount, the error after we free everything. */ err = mca_pml.pml_wait_all(nreqs, req, MPI_STATUSES_IGNORE); - /* Free the reqs */ - mca_coll_basic_free_reqs(req, nreqs); - /* All done */ return err; } diff --git a/src/mca/coll/basic/src/coll_basic_reduce_scatter.c b/src/mca/coll/basic/src/coll_basic_reduce_scatter.c index 860c84109d..3823414993 100644 --- a/src/mca/coll/basic/src/coll_basic_reduce_scatter.c +++ b/src/mca/coll/basic/src/coll_basic_reduce_scatter.c @@ -236,8 +236,12 @@ int mca_coll_basic_reduce_scatter_inter(void *sbuf, void *rbuf, int *rcounts, has already the correct data AND we avoid a potential deadlock here. */ + err = mca_pml.pml_irecv (rbuf, rcounts[rank], dtype, root, + MCA_COLL_BASE_TAG_REDUCE_SCATTER, + comm, &req); + tcount = 0; - for ( i=1; i