[MPI3 Fortran] [ukfortran] (SC22WG5.3898) (j3.2006) MPI non-blocking transfers

N.M. Maclaren nmm1 at cam.ac.uk
Thu Jan 22 14:08:52 CST 2009

On Jan 22 2009, Aleksandar Donev wrote:
>On Thursday 22 January 2009 11:40, Bill Long wrote:
>> The only safe thing for the
>> compiler to do is treat array as volatile throughout the subprogram
>> containing these two calls.
>No! For ASYNCHRONOUS, there is a restriction on the *programmer* that if 
>array is referenced/defined, it is not currently a pending I/O 
>affector. This is the same as for coarrays, which may make things 
>clearer: If a coarray is defined/referenced, the compiler can fully 
>optimize without worrying about other images, *in-between* 
>image-control statements. The same logic applies for 
>ASYNCHRONOUS---optimize unless you see a WAIT. Note however that some 
>of the optimizations Nick mentioned should also be disabled for 
>coarrays. Notably, a piece of a coarray that is *not* 
>referenced/defined in a segment *may* indeed be referenced/defined by 
>other images. So the optimizer must not touch those pieces, even in 
>what would be harmless ways in a serial code.

Yes, precisely.

>For a classic (serial) optimizer, ASYNCHRONOUS and coarrayness and 
>threading and all of those things are essentially the same: Something 
>else, which is not included in the classic control/data flow analysis, 
>can store/load certain values, which are marked in some sense (via 
>CODIMENSION/ASYNCHRONOUS/VOLATILE attribute). Do you think all coarrays 
>are effectively VOLATILE??? If not, then the same applies to 
>ASYNCHRONOUS variables.

Again, precisely.

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