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

Bill Long longb at cray.com
Thu Apr 14 17:36:21 CDT 2011

On 4/14/11 3:03 PM, Rolf Rabenseifner wrote:
> ----- Original Message -----
>> From: "N.M. Maclaren"<nmm1 at cam.ac.uk>
>>> From: "Rolf Rabenseifner"
> Nick,
> Let's look at
>    CALL MPI_Irecv(buf, rq)
>    CALL MPI_Wait(rq)
>    xnew=buf
> and the new value for buf may be received within the MPI_Wait call.
>>> To summarize, there are several options:
>>> - TARGET buf
>> Why should that work? Fortran compilers are required to take
>> notice of it only when also operating with POINTER variables. And
>> there is nothing stopping them from moving such data dynamically,
>> if they update all associated pointers. That's old technology,
>> after all.

The normal user mechanism to prevent the reference to buf from moving 
across the call to MPI_Wait is to put buf in a module.  The compiler has 
to assume that MPI_Wait uses that module and hence could modify buf. 
The fftw library has similar problems (pointer to "buf" hidden inside 
"rq") and the normally recommended solution is module variables.

In the case of MPI_Wait, I think that a solution that prevented ALL code 
motion across the call would be acceptable.   Currently compiler 
directives (vendor-dependent) are employed for this.  Perhaps a new 
<prefix> on the subroutine interface.  We currently have PURE and 
IMPURE.  We would need a third option that is stronger than IMPURE that 
would indicate that the subroutine can access and modify variables that 
are, or are associated with,  variables that are not in common, not in a 
module, and not associated with arguments (i.e. violates the normal 
Fortran rules).   Perhaps the VILE prefix would be appropriate. :)

An outside-the-standard solution is to have implementations just "know" 
about MPI_Wait and never move code across a call.  Typically this would 
involve the processor inserting a hidden directive at the call site that 
suppresses all code motion and forces variables to memory.  Equivalent 
to the MPI standard mandating this for an implementation that claims to 
support MPI 3.0.


Bill Long                                           longb at cray.com
Fortran Technical Support    &                 voice: 651-605-9024
Bioinformatics Software Development            fax:   651-605-9142
Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101

More information about the mpiwg-fortran mailing list