[MPI3 Fortran] Proposing changes to Fortran 2008

Aleksandar Donev donev1 at llnl.gov
Wed Apr 16 17:19:39 CDT 2008

On Wednesday 16 April 2008 09:33, Hubert Ritzdorf wrote:

> the application program would not work.
The Fortran standard cannot ever be changed to say that under whatever 
compilation flag or setting it suddenly becomes illegal to pass array 
sections as arguments.

> I hate destroying running application programs
The committee hates it even more to destroy conforming (stronger statement 
than running, since it means the standard guarantees they will run on any 
conforming compiler) programs!

> By the way. What does the 2003 compiler/runtime say if the application
> program
> (*) tries to perform an asynchronous read/write of an non-contiguous
> array section
>      and
> (*)  pass this array-section to a subroutine which requires copy-in/copy
> out before the WAIT statement is executed ?
In short, if all async stuff happens inside the routine, the actual does not 
have to have the ASYNCHRONOUS attribute, only the dummy. In this case, there 
is absolutely no problem of any sort with copying.

If there is no pending i/o when the procedure is called (i.e., nothing async 
happens while the procedure is running), the dummy does not have to be async. 
Again, no problem with copy in/out.

Only when there is async i/o both in the caller and callee, as is the case 
when the procedure starts an async operation that completes later, both dummy 
and actual should have the attribute (this is not enforced by the compiler). 
In this case copying is avoided by compile-time constraints that put 
restrictions on what kind of actual arguments can be passed to what kind of 

> VOLATILE is different. Volatile means that other processes/threads may
> change the data. 
Exactly what happens here---MPI runtime is that other process. What if I try 
to access a variable while async I/O is still pending (no WAIT completed 
yet)? Shouldn't the compiler reload the latest value from memory. Or am I not 
allowed to do that? Frankly, I don't know the answer. I cannot see anything 
in the standard...I will ask.

> MPI nonblocking communication is quite similar to asynchronous read/write.
Yes, OK, let's agree on that.
> Therefore, an extension of ASYNCHRONOUS  attribute for MPI or other
> communication libraries would be most appropriate and should cause minimal
> conflicts with the actual Fortran standard.
OK again.

> You can take most of the 
> description
> of the ASYNCHRONOUS attribute and replace input/output by communication
> (only the WAIT doesn't fit, since MPI_Wait is not know by the Fortran
> standard).
The point of the asynchronous attribute, as stated in notes, is: The async 
attribute has been introduced to warn the compiler that optimizations 
involving movement of code across wait statements are not OK. So without 
wait, what exactly is the meaning of the attribute. I.E., what does it tell 
the compiler to do differently?


More information about the mpiwg-fortran mailing list