(j3.2006) Comment on Fortran WG5 ballot N1846

Van Snyder van.snyder
Wed Apr 20 06:29:03 UTC 2011


> />/ On Tue, 2011-04-19 at 15:27 -0700, Dan Nagle wrote:
> /
>   
>>> / This returns to the fundamental point that the processor knows all
>>>       
> />>/ regarding Fortran asynchronous i/o, but nothing of external libraries,
> />>/ whether or not said libraries are considered communications.
> />/ 
> />/ This is a red herring.
> /
> Hardly.
>
> Consider an implementation of Fortran asynch i/o such as the following:
>
> For writes:
>
> 1. At the asynch write statement, allocate a buffer large enough
>    to hold the i/o list, copy the i/o list items into the buffer,
>    and un-map the buffer from the virtual address space of the program.
>
> 2. Signal an external i/o processor to operate on the buffer,
>    perhaps using a DMA port.
>
> 3. Continue execution of the Fortran program.
>
> 4. At the wait statement, wait for the i/o processor to signal done
>    and deallocate the buffer.
>
> For reads:
>
> 1. At the asynch read statement, allocate a buffer large enough to contain
>    the i/o list, and un-map it from the virtual address space of the program.
>
> 2. Signal an external i/o processor to operate on the buffer,
>    perhaps using a DMA port.
>
> 3. Continue execution of the Fortran program.
>
> 4. At the wait statement, wait for the i/o processor to signal done,
>    re-map the buffer into the virtual address space of the program,
>    copy the buffer into the i/o list items, and deallocate the buffer.
>
> The i/o list items need no special handling during the time between
> the transfer statement and the wait statement.  Indeed, the actual transfer
> is done via an external processor accessing memory that is un-mapped
> from the program altogether!
>
> An arbitrary external library may not have access to the vendor's API,
> or the authors may simply have chosen not to use it (for lack of documentation,
> portability, or any other reason).
>   

This is all true, but is irrelevant to the fact that in the program

asynchronous X
external A, B
call A ( X )
call B
print *, X
end

the processor can't know if or how X is asynchronous.  If it provides 
asynchronous I/O, it has to respect the ASYNCHRONOUS attribute, no 
matter whether or how the "asynchronous" happens in A.

> The red herring is how many levels of call are involved.
>
>   




More information about the J3 mailing list