On Wed, 15 Jul 2009, Lisandro Dalcin wrote:
> The MPI 2-1 standard says:
> "MPI_PROC_NULL is a valid target rank in the MPI RMA calls
> MPI_ACCUMULATE, MPI_GET, and MPI_PUT. The effect is the same as for
> MPI_PROC_NULL in MPI point-to-point communication. After any RMA
> operation with rank MPI_PROC_NULL, it is still necessary to finish the
> RMA epoch with the synchronization method that started the epoch."
> Unfortunately, MPI_Accumulate() is not quite the same as
> point-to-point, as a reduction is involved. Suppose you make this call
> (let me abuse and use keyword arguments):
> MPI_Accumulate(..., target_rank=MPI_PROC_NULL,
> target_datatype=MPI_BYTE, op=MPI_SUM, ...)
> IIUC, the call fails (with MPI_ERR_OP) in Open MPI because MPI_BYTE is
> an invalid datatype for MPI_SUM.
> But provided that the target rank is MPI_PROC_NULL, would it make
> sense for the call to success?
I believe no. We do full argument error checking (that you provided a
valid communicator and datatype) on send, receive, put, and get when the
source/dest is MPI_PROC_NULL. Therefore, I think it's logical that we
extend that to include valid operations for accumulate.