[MPI3 Fortran] Results of San Jose Forum meeting

Bill Long longb at cray.com
Sat Mar 13 14:59:44 CST 2010



Rolf Rabenseifner wrote:
> Hi,
> 
> a short question: If an MPI library implementation declares the
> MPI routines as bind C, is then the internal call mechanism
> standardized?

It is between the Fortran compiler and its companion C compiler, as long 
as each argument is "interoperable" as specified in the Fortran 
standard.   The limitation of compatibility only between companion 
processors is key.  It is not required (or even practical)  that a 
Fortran compiler be compatible with a C compiler it does not know about.

Typically, this results in two camps:

1) The Fortran compiler vendor also supplies a C compiler, in which case 
the companion C compiler is its own.  This is common, and the most 
robust option since the vendor controls both compilers, and probably 
uses a common compiler back-end. Such a vendor may choose to support 
additional companion C processors, as long as there is some mechanism to 
specify which one at compile time.

2) The Fortran compiler vendor does not supply its own C compiler, in 
which case the usual selection of the companion C compiler is gcc.  This 
selection is not required by the standard - but it is practical.

Normally,  vendor-supplied MPI libraries will have been compiled with a 
known  companion C compiler, so things should work.

Cheers,
Bill


> Or identical with all C compilers because the handle call by
> reference for integers and structurs identical? 
> 
> Best regards
> Rolf
> 
> ----- "Aleksandar Donev" <adonev at lbl.gov> wrote:
> 
>> Hi,
>>
>>> I hope that these citations are correct in relation to the official
>>> Fortran 2003 standard.
>> Sure, it all is more or less right.
>>
>>> Based on this, for use mpi and use mpi3, only one identical
>>> backend (written in C) should be necessary.
>> OK, fine, but that is not implied by the words you quoted. For
>> example, 
>> it is perfectly possible (plausible) for an integer and a struct to be
>>
>> passed differently (e.g., integer goes in register, the struct on the
>>
>> stack), and adding SEQUENCE does nothing to change that. If you are 
>> relying on some "backend" (meaning, really, ABI) property, say so, do
>>
>> not pretend that the Fortran standard guarantees something it does
>> not.
>>
>> This is not to say that it will not be possible to still use one
>> backend 
>> even if the interface says TYPE(MPI_Comm) instead of INTEGER---but
>> that 
>> is outside the scope of the Fortran standard. One should instead look
>> at 
>> ABIs and conventions compilers use to pass such arguments around.
>>
>> Best,
>> Aleks
>> _______________________________________________
>> mpi3-fortran mailing list
>> mpi3-fortran at lists.mpi-forum.org
>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
> 

-- 
Bill Long                                           longb at cray.com
Fortran Technical Support    &                 voice: 651-605-9024
Bioinformatics Software Development            fax:   651-605-9142
Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101





More information about the mpiwg-fortran mailing list