[MPI3 Fortran] [Fwd: Library-based ASYNCHRONOUS I/O and SYNC MEMORY]

Jeff Squyres jsquyres at cisco.com
Mon Sep 8 11:29:42 CDT 2008


Would this also apply to array subsets, e.g., if I called MPI_Isend()  
with foo(1:20, 5:7, 27:92)?  In that case, I only care about the array  
subset -- whether it was passed as the original array or as a copy.

Or does noopt_begin() also disable array subset copies?


On Sep 7, 2008, at 6:24 AM, Hubert Ritzdorf wrote:

> 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?
>>
>
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran


-- 
Jeff Squyres
Cisco Systems




More information about the mpiwg-fortran mailing list