[MPI3 Fortran] [Interop-tr] [Mpi-forum] Comment on Fortran WG5 ballot N1846

Van Snyder Van.Snyder at jpl.nasa.gov
Tue Apr 19 15:35:53 CDT 2011


On Thu, 2011-04-14 at 13:03 -0700, Rolf Rabenseifner wrote:
> With
> CALL MPI_Irecv(buf, rq)
> CALL MPI_Wait(rq)
> CALL MPI_F_SYNC_REG(buf)
> xnew=buf
> 
> 
> The content of MPI_F_SYNC_REG is outside the scope of the
> Fortran optimization.
> I do not see that the compiler is allowed to move 
> "xnew=buf" before the MPI_Wait statement because
> "MPI_F_SYNC_REG(buf)" may have modified the content of buf.
> 
> Therefore the problem is solved.
> 
> Correct?
>   
> If not, please can you show a detailed code, how 
> such a compiled code could work and in xnew is at the end
> ***not*** the value that was stored in buf by MPI_Wait.

If this works, why not change the Fortran -> MPI interface for MPI_Wait
to include "buf" instead of attaching the TARGET attribute to "buf" and
hoping the processor will guess that implies that a pointer to "buf"
might be hiding in "rq"?  After all, the processor can see "rq" and its
type (which might actually be TYPE(*)?), so it might (reasonably)
conclude from its analysis that "rq" doesn't contain any pointers to
"buf".





More information about the mpiwg-fortran mailing list