[MPI3 Fortran] Proposed solution for the volatile buffer problem

N.M. Maclaren nmm1 at cam.ac.uk
Wed Jan 14 16:03:21 CST 2009

On Jan 14 2009, Aleksandar Donev wrote:
>> Sorry, but THAT misses the point!  If the volatility applies just
>> over the actual call, then even flagging all of MyIsend, MyIrecv,
>> MyWait, MPI_Isend, MPI_Irecv and MPI_Wait won't help. 
>Actually, only the MPI routines themselves should be flagged. The 
>compiler would have to assume, in the absence of extra information, 
>that any routine may include a call to these "flagged" routines.

But that degrades performance for any procedure that calls another

>> Remember that 
>> the update can occur at ANY time between starting the transfer and
>> waiting for its completion, including when control is inside
>> Transfer.
>But, isn't it prohibited to touch buffer while there is a pending 
>transfer? Just like we restrict for ASYNCHRONOUS variables in Fortran. 
>If so, then any access to any of the variables can be freely optimized, 
>with the *only* exception being that code cannot be moved accross 
>certain calls, that is, all variables need to be refreshed after and 
>flushed before.

Yes, but that doesn't help enough.

Firstly, you can pass an array to a procedure that uses copy-in/copy-out
but does not touch that array in that call, and that is illegal but goes

Secondly, a compiler is allowed to assume that unreferenced parts of an
array are invariant, and so may copy more than it needs to - which can
sometimes be a lot faster.

>This is not to say I am advocating for Bill's proposal---I am a firm 
>believer that variables liable to change out of the blue *must* be 
>marked as such. But, I am trying to understand what you two are arguing 


Nick Maclaren,
University of Cambridge Computing Service,
New Museums Site, Pembroke Street, Cambridge CB2 3QH, England.
Email:  nmm1 at cam.ac.uk
Tel.:  +44 1223 334761    Fax:  +44 1223 334679

More information about the mpiwg-fortran mailing list