Brian and I just noticed something -- a long time ago, I thought I was being clever and forward-thinking by ensuring to define MPI_REPLACE as a valid reduction operator for MPI_REDUCE (and friends). The careful reader will remember that MPI_REPLACE is the MPI-2 MPI_Op added for MPI_ACCUMULATE (the one-sided, non-collective operation). All MPI-2 says that is MPI_REPLACE is a new MPI_Op -- MPI-2 does not limit its use to MPI_ACCUMULATE. So I merrily added MPI_REPLACE to the general reduction tables, and bingo -- you can use MPI_REPLACE in MPI_REDUCE. Woo hoo!

But thinking about this today, I have no idea what MPI_REPLACE is supposed to do in a collective reduction. Specifically -- what value should end up in the target buffer? It doesn't make sense.

I think that this is a grey area in the MPI standard -- MPI_REPLACE is an MPI_Op, but it should *only* be used with MPI_ACCUMULATE, and not with the collective reduction functions.

Any comments on this MPI interpretation?  Agree / disagree?

--
{+} Jeff Squyres
{+} The Open MPI Project
{+} http://www.open-mpi.org/

Reply via email to