[MPI3 Fortran] [Fwd: Library-based ASYNCHRONOUS I/O and SYNC MEMORY]
Hubert Ritzdorf
ritzdorf at it.neclab.eu
Sun Sep 7 05:24:39 CDT 2008
Hi,
also I think that a begin and end section is required and the compiler needs
full control. One possibility would be:
!cdir noopt_begin{buffer1, buffer2, buffer3)
...
!cdir noopt_end (buffer1)
...
!cdir noopt_end (buffer1, buffer2)
which simply turns off any optimization for the buffers
"buffer1, buffer2, buffer3" within the block defined by
"begin" and "end" such as the Fortran compiler knows
the buffers "buffer1, buffer2, buffer3". The user program
is responsible to provide enough Fortran internal info
on the buffers.
More specific:
!cdir noopt_begin{buffer1, buffer2, buffer3}
should inform the compiler that the buffers
(as the compilers knows them) are used by some other interface.
The compiler should
(*) all register optimiation concerning buffer1, buffer2, buffer3
write back to memory
(*) not move any statement into/out the begin/end block
of "no optimization"
(*) not remove "buffer1, buffer2 or buffer3" before the
corresponding "noopt_end" directive for the corresponding
buffer within the compile unit is reached
!cdir noopt_end(buffer)
should inform the compiler that
(*) optimization is now allowed again
(*) no code corresponding buffer (as it is known by the
Fortran compiler) should be moved before the "noopt_end"
directive
The end of a compile unit implicitly specifies the end of all "noopt_begin"
directives which were not already finished.
I assume that SYNC MEMORY will implicitly flush the memory or
perform an internal barrier which might be to expensive in general
case.
Hubert
Dan Nagle wrote:
> Hello,
>
> On Sep 6, 2008, at 6:40 AM, Jeff Squyres wrote:
>
>> FWIW, my $0.02 is that it would be great if Fortran allowed temporary
>> aliases of buffers. It could be clearly marked where aliases begin
>> and end.
>
>
> How does the compiler know that one library routine
> is the start of an asynchronous region for one name,
> or sub-part of one name, and another routine marks the end?
> As far as the compiler is concerned, there's nothing
> special about the names of the library routines.
>
> At the expense of some simplification,
>
> call start_it( a, i)
> ...
> call end_it( i)
>
> and what is sought is a way to indicate that calling
> start_it() marks 'a' as asynchronous until end_it()
> is called. But 'a' doesn't appear as an argument to end_it() !
> There can be several 'a's and 'i's in flight at one time.
>
>> It would also be great if these aliases could be on a per-buffer
>> basis -- an all-or-nothing approach like SYNC MEM is good, but
>> per-buffer granularity would be better.
>
> I suspect that some attribute for dummy arguments
> expressed in an interface is the way to go, rather than
> attributes applied to an entire scoping unit. Perhaps
> we must place 'a' on the call to end_it() somehow.
>
>> I don't need to touch any compiler/RTL data -- I just want the
>> compiler/runtime/whatever to let me have the user's buffer "in the
>> background" for a while.
>
> We agree on the goal.
> How do we get there?
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3245 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-fortran/attachments/20080907/baeb7f66/attachment-0001.bin>
More information about the mpiwg-fortran
mailing list