[MPI3 Fortran] MPI non-blocking transfer

Craig Rasmussen crasmussen at lanl.gov
Tue Feb 10 18:29:08 CST 2009


More guidance from J3 Fortran:

MPI 2.1 and MPI 2.1+ solution:

1.  Put the transfer buffer, buf in a module (or a common block).  The  
compiler must assume that MPI_Wait (or any other procedure) may use  
the module and write to buf.  So code motion is inhibited and buf  
can't be stored in registers.
2.  Declare buf to be volatile.

Potential solution(s) for MPI 3.0:

Provide a new attribute to the MPI_Wait procedure, let's call it the  
MPI_NONBLOCKING_ATTRIBUTE.  The question is, what should the semantics  
be?  I believe they are:

1. Inhibit code motion around the procedure.
2. Flush all registers before the call.
3. Reload registers after the call.

The MPI_NONBLOCKING_ATTRIBUTE will only be in affect at the call site  
of MPI_Wait.

The advantage of an attribute on the procedure is that it can occur in  
the interface declaration only and users code won't have to change.   
The is an advantage over

     BLOCK
          VOLATILE :: buf
          call MPI_Wait()
     END BLOCK

In addition Nick believes that VOLATILE can't be used within a block  
construct in this way.

If a new procedure attribute is acceptable, please let me know and  
I'll submit a J3 paper for consideration this week.

Cheers,
Craig


On Feb 10, 2009, at 3:40 PM, Craig Rasmussen wrote:

>
> On Feb 9, 2009, at 4:06 PM, Aleksandar Donev wrote:
>
>> On Monday 09 February 2009 14:57, Rolf Rabenseifner wrote:
>>>      2.3 The existing solution must continue to work, i.e.,
>>>          all existing and correct MPI applications must continue
>>>          to work.
>> There is no "existing solution", unless you count VOLATILE, which is
>> only standard as of Fortran 2003. As you say,
>
> I would like to reiterate, the MPI Forum has already received  
> guidance from the J3 Fortran committee regarding this issue.  The  
> guidance is to use the volatile attribute.  I can dig up and resend  
> the official J3 document if you want.  I'll also discuss it further  
> this afternoon and tomorrow.  But I'm not sure the guidance will  
> change.  Somehow the user must give the compiler specific  
> instruction about the usage of the buffer within the Fortran language.
>
> You don't really want Fortran to treat buffers like C does as that  
> will slow down all of your Fortran program.
>
> Cheers,
> Craig
>
>
>>
>>>      2.4 It is not my goal to automatically correct existing wrong
>>>          MPI applications, i.e., applications without the DD trick
>> the DD thing is a trick (I call them hacks), and actually does not  
>> solve
>> the full problem, e.g., Nick has pointed out that problems can  
>> occur at
>> the site of the call to MPI_Isend, *not* just the site of the wait  
>> (but
>> the cases when it fails are marginal and likely do not happen often
>> enough to notice).
>> Best,
>> Aleks
>> -- 
>> Aleksandar Donev, Ph.D.
>> Lawrence Postdoctoral Fellow @ Lawrence Livermore National Laboratory
>> High Performance Computational Materials Science and Chemistry
>> E-mail: donev1 at llnl.gov
>> Phone: (925) 424-6816  Fax: (925) 423-0785
>> Address: P.O.Box 808, L-367, Livermore, CA 94551-9900
>> Web: http://cherrypit.princeton.edu/donev
>
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran




More information about the mpiwg-fortran mailing list