[MPI3 Fortran] Proposing changes to Fortran 2008

Hubert Ritzdorf ritzdorf at it.neclab.eu
Thu Mar 27 09:53:29 CDT 2008


Aleksandar Donev wrote:
> Hi,
> Not to be argumentative, take this as IMO please.
> On Friday 21 March 2008 05:13, Hubert Ritzdorf wrote:
>> MPI and Fortran 77 have worked without any problems
> Except for the problem that the MPI Forum chose to completely ignore and 
> violate ALL existing Fortran standards. This *includes* Fortran 77. All 
> Fortran versions are strictly typed and passing a REAL array to an INTEGER 
> argument has never been, nor will it ever be legal.
>> Thus, an attribute for an argument "Behave such as without interface
>> description
> Then don't supply an interface? Or simply say
> VOID :: buffer 
> for the actual just to give it a name. I already commented on this earlier.
This is what some vendors already implemented (using different names). 
When I remember (and understood)
it correctly, you mentioned that they didn't it right. Since the 
behaviour should be well-defined if an
interface description is not available and the vendors have to implement 
it, and it should be possible
to specify it for a single argument. It's fine for me to have such a 
VOID attribute.
>> and don't perform copy-in/copy-out" 
> What if the actual argument is a strided (non-contiguous) array or, say, an 
> array constructor? The Fortran committee did not invent copy-in/copy-out 
> because compilers wanted to do copy frivolously. It is a necessary 
> implementation method to pass certain types of actuals to certain types of 
> dummies. You have to explicitly address this and cannot just say "go back to 
> Fortran 77". New Fortran has strided arrays, array constructors, array 
> pointers, etc., etc., like it or not.
There are 2 general problems for MPI with these copy-in/copy-out behaviour:
   (*) In non-blocking MPI communication routines, the buffers may be 
        or sent after the MPI routine which specifies the buffer has 
already finished.
        If the compiler issues a copy-in/copy out of that buffer 
before/after that
        MPI routine, this causes incorrect results. I.e. the data is 
read from or written
        to memory which is already used by other tasks. Even if the 
        programmer is aware of this and has ensured that the data is 
stored in
        consecutive/contiguous memory addresses, it happens that the 
       performs a copy-in/copy-out before/after these MPI routines.
       Thus, a major problem for the application programmer is that there is
       no possibility to specify this to the interface description so 
that the
       compiler doesn't perform copy-in/copy out.
       A second major problem is that the application program may work
       for a long time with this copy-in/copy-out behaviour for 
non-blocking MPI routines.
       But small changes in the  run-time behaviour of the application 
program may cause
       errors (incorrect results/segmentation violations) in other (far 
away) parts of the application
       programs which are very very hard to find/debug.
   (*) Derived MPI datatypes are defined as sequence of primitive types 
and byte displacements.
         The byte displacements (which might be negative) are relative to
         the buffer specified in the MPI function call. (If the 
MPI_BOTTOM is specified as MPI buffer,
         you can see the byte displacements as memory addresses).
        In order to compute these displacements for general derived 
datatypes, function MPI_Get_address
        should be called. Again copy-in before MPI_Get_address or 
copy-in/copy-out before/after a
        MPI communication subroutine call might cause incorrect results 
because the memory layout of
        the generated MPI derived datatype and the memory layout which 
was  generated by the
        compiler before/after the MPI communication call might be 
totally different.
        Even if the application programmer defines MPI derived datatype 
correctly, he cannot control
        the behaviour of the application program since he doesn't know 
at which places the
        compiler creates temporary memory in order to perform 
Best regards


-------------- 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/20080327/e80643c0/attachment-0001.bin>

More information about the mpiwg-fortran mailing list