diff --git a/ompi/mca/coll/spacc/coll_spacc_allreduce.c b/ompi/mca/coll/spacc/coll_spacc_allreduce.c index 165ef06bed..43b41fe7f2 100644 --- a/ompi/mca/coll/spacc/coll_spacc_allreduce.c +++ b/ompi/mca/coll/spacc/coll_spacc_allreduce.c @@ -276,10 +276,12 @@ int mca_coll_spacc_allreduce_intra_redscat_allgather( rcount[step], dtype); /* Move the current window to the received message */ - rindex[step + 1] = rindex[step]; - sindex[step + 1] = rindex[step]; - wsize = rcount[step]; - step++; + if (step + 1 < nsteps) { + rindex[step + 1] = rindex[step]; + sindex[step + 1] = rindex[step]; + wsize = rcount[step]; + step++; + } } /* * Assertion: each process has 1 / p' of the total reduction result: diff --git a/ompi/mca/coll/spacc/coll_spacc_reduce.c b/ompi/mca/coll/spacc/coll_spacc_reduce.c index 8ec1ac6ad1..b301ea59ee 100644 --- a/ompi/mca/coll/spacc/coll_spacc_reduce.c +++ b/ompi/mca/coll/spacc/coll_spacc_reduce.c @@ -291,10 +291,12 @@ int mca_coll_spacc_reduce_intra_redscat_gather( rcount[step], dtype); /* Move the current window to the received message */ - rindex[step + 1] = rindex[step]; - sindex[step + 1] = rindex[step]; - wsize = rcount[step]; - step++; + if (step + 1 < nsteps) { + rindex[step + 1] = rindex[step]; + sindex[step + 1] = rindex[step]; + wsize = rcount[step]; + step++; + } } } /*