From da87169d17513351ce7356f46ba7c11c8f71d08f Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Tue, 13 Sep 2005 18:02:36 +0000 Subject: [PATCH] Add support for MPI_IN_PLACE for the easy operations. This commit was SVN r7344. --- ompi/mca/coll/basic/coll_basic_allgather.c | 3 ++- ompi/mca/coll/basic/coll_basic_gather.c | 6 ++++-- ompi/mca/coll/basic/coll_basic_gatherv.c | 3 ++- ompi/mca/coll/basic/coll_basic_scatter.c | 8 +++++--- ompi/mca/coll/basic/coll_basic_scatterv.c | 7 +++---- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/ompi/mca/coll/basic/coll_basic_allgather.c b/ompi/mca/coll/basic/coll_basic_allgather.c index b9dde5711d..a81eea7111 100644 --- a/ompi/mca/coll/basic/coll_basic_allgather.c +++ b/ompi/mca/coll/basic/coll_basic_allgather.c @@ -48,8 +48,9 @@ mca_coll_basic_allgather_intra(void *sbuf, int scount, err = comm->c_coll.coll_gather(sbuf, scount, sdtype, rbuf, rcount, rdtype, 0, comm); - if (MPI_SUCCESS != err) + if (MPI_SUCCESS != err) { return err; + } err = comm->c_coll.coll_bcast(rbuf, rcount * size, rdtype, 0, comm); return err; diff --git a/ompi/mca/coll/basic/coll_basic_gather.c b/ompi/mca/coll/basic/coll_basic_gather.c index ef540f7177..8236c45a79 100644 --- a/ompi/mca/coll/basic/coll_basic_gather.c +++ b/ompi/mca/coll/basic/coll_basic_gather.c @@ -71,8 +71,10 @@ mca_coll_basic_gather_intra(void *sbuf, int scount, /* simple optimization */ if (i == rank) { - err = ompi_ddt_sndrcv(sbuf, scount, sdtype, ptmp, - rcount, rdtype); + if (MPI_IN_PLACE != sbuf) { + err = ompi_ddt_sndrcv(sbuf, scount, sdtype, ptmp, + rcount, rdtype); + } } else { err = MCA_PML_CALL(recv(ptmp, rcount, rdtype, i, MCA_COLL_BASE_TAG_GATHER, diff --git a/ompi/mca/coll/basic/coll_basic_gatherv.c b/ompi/mca/coll/basic/coll_basic_gatherv.c index 2c84a257ef..99da9445f8 100644 --- a/ompi/mca/coll/basic/coll_basic_gatherv.c +++ b/ompi/mca/coll/basic/coll_basic_gatherv.c @@ -76,9 +76,10 @@ mca_coll_basic_gatherv_intra(void *sbuf, int scount, if (i == rank) { /* simple optimization */ - if ((0 < scount) && (0 < rcounts[i])) + if (MPI_IN_PLACE != sbuf && (0 < scount) && (0 < rcounts[i])) { err = ompi_ddt_sndrcv(sbuf, scount, sdtype, ptmp, rcounts[i], rdtype); + } } else { /* Only receive if there is something to receive */ if (rcounts[i] > 0) { diff --git a/ompi/mca/coll/basic/coll_basic_scatter.c b/ompi/mca/coll/basic/coll_basic_scatter.c index c527bb7116..076f73e215 100644 --- a/ompi/mca/coll/basic/coll_basic_scatter.c +++ b/ompi/mca/coll/basic/coll_basic_scatter.c @@ -75,9 +75,11 @@ mca_coll_basic_scatter_intra(void *sbuf, int scount, /* simple optimization */ if (i == rank) { - err = - ompi_ddt_sndrcv(ptmp, scount, sdtype, rbuf, rcount, - rdtype); + if (MPI_IN_PLACE != recvbuf) { + err = + ompi_ddt_sndrcv(ptmp, scount, sdtype, rbuf, rcount, + rdtype); + } } else { err = MCA_PML_CALL(send(ptmp, scount, sdtype, i, MCA_COLL_BASE_TAG_SCATTER, diff --git a/ompi/mca/coll/basic/coll_basic_scatterv.c b/ompi/mca/coll/basic/coll_basic_scatterv.c index 713b334113..eaed0f1fa6 100644 --- a/ompi/mca/coll/basic/coll_basic_scatterv.c +++ b/ompi/mca/coll/basic/coll_basic_scatterv.c @@ -79,11 +79,10 @@ mca_coll_basic_scatterv_intra(void *sbuf, int *scounts, if (i == rank) { /* simple optimization or a local operation */ - if (0 == scounts[i]) { - continue; + if (scounts[i] > 0 && MPI_IN_PLACE != rbuf) { + err = ompi_ddt_sndrcv(ptmp, scounts[i], sdtype, rbuf, rcount, + rdtype); } - err = ompi_ddt_sndrcv(ptmp, scounts[i], sdtype, rbuf, rcount, - rdtype); } else { /* Only send if there is something to send */ if (scounts[i] > 0) {