You are depending on luck. The MPI Standard
allows the implementation to assume that send and recv buffers are distinct
unless MPI_IN_PLACE is used. Any MPI implementation may have more
than one algorithm for a given MPI collective communication operation and
the policy for switching algorithm is not documented.
It is entirely possible that something
like going from 32 to 64 processes or changing interconnects will cause
a different algorithm to be used. Applying a patch could also cause the
algorithm to be changed.
In theory one algorithm could let you
get away with the violation while another trips on it and a change you
do not even realize you made cause bad answers to show up. Perhaps some
algorithm uses space in the receive buffer as scratch.
Standards compliant code is safer.
Dick
Dick Treumann - MPI Team
IBM Systems & Technology Group
Dept X2ZA / MS P963 -- 2455 South Road -- Poughkeepsie, NY 12601
Tele (845) 433-7846 Fax (845) 433-8363
From:
Tom Rosmond <rosmond@reachone.com>
To:
users@open-mpi.org
Date:
09/16/2010 12:05 PM
Subject:
[OMPI users] send and receive buffer
the same on root
Sent by:
users-bounces@open-mpi.org
I am working with a Fortran 90 code with many MPI
calls like this:
'x' is allocated on root to be large enough to hold the results of the
gather, other arrays and parameters are defined correctly, and the code
runs as it should. However, I am concerned that having the same send
and receive buffer on root is a violation of the MPI standard. Am
I
correct? I am aware of the MPI_IN_PLACE feature that can be used
in
this situation, by defining it as the send buffer at root.
The fact that the code as written seems to work on most system we run on
(some with OpenMPI, some with proprietary MPI's) indicates that in spite
of the standard, implementations allow it. Is this correct, or are
we
just lucky.