Re: [MPI3 Fortran] [ukfortran] (SC22WG5.3898) (j3.2006) MPI non-blocking transfers
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. Regards, Nick Maclaren, University of Cambridge Computing Service, New Museums Site, Pembroke Street, Cambridge CB2 3QH, England. Email: [email protected] Tel.: +44 1223 334761 Fax: +44 1223 334679
participants (1)
-
N.M. Maclaren