20.1.7. Requirements on Fortran Compilers
Up: Support for Fortran
Next: Additional Support for Fortran Register-Memory-Synchronization
Previous: MPI for Different Fortran Standard Versions
MPI-3.0 (and later) compliant Fortran bindings are not
only a property of the MPI library itself, but rather
a property of an MPI library together with the Fortran compiler suite
for which it is compiled.
Advice to users.
Users must take appropriate steps to ensure that proper options are specified
to compilers. MPI libraries must document these options.
Some MPI libraries are shipped together with special compilation scripts
(e.g., mpif90, mpicc) that set these options automatically.
( End of advice to users.)
An MPI library together with the Fortran compiler suite
is only compliant with MPI-3.0 (and later), as referred
by MPI_GET_VERSION, if all the solutions described in
Sections Problems Due to Strong Typing through Permanent Data Movement
work correctly.
Based on this rule, major requirements for all three
Fortran support methods (i.e., the mpi_f08 and mpi modules, and mpif.h) are:
- The language features assumed-type and assumed-rank
from Fortran 2008 TS 29113
[47] are available.
This is required only for mpi_f08.
As long as this requirement is not supported by the compiler,
it is valid to build
an MPI
library that implements the mpi_f08 module with
MPI_SUBARRAYS_SUPPORTED set to .FALSE..
- ``Simply contiguous'' arrays and scalars
must be passed to choice buffer dummy arguments of nonblocking routines
with call by reference.
This is needed only if one of the support methods does not use
the ASYNCHRONOUS attribute.
See Section Problems Due to Data Copying and Sequence Association with Subscript Triplets for more details.
- SEQUENCE and BIND(C) derived types
are valid as actual arguments passed to choice buffer dummy arguments,
and, in the case of MPI_SUBARRAYS_SUPPORTED set to
.FALSE.,
they are passed with call by reference,
and passed by descriptor in the case of .TRUE..
- All actual arguments that are allowed for a dummy argument
in an implicitly defined and separately compiled Fortran routine
with the given compiler (e.g., CHARACTER(LEN=*) strings
and array of strings) must also be valid for choice buffer
dummy arguments with all Fortran support methods.
- The array dummy argument of the ISO_C_BINDING intrinsic module procedure
C_F_POINTER is not restricted to Fortran types for which
a corresponding type in C exists.
- The Fortran compiler shall not provide TYPE(*) unless the ASYNCHRONOUS
attribute protects MPI communication as described in
TS 29113.
Specifically, the TS 29113 must be implemented as a whole.
The following rules are required at least as long as the compiler does not provide
the extension of the ASYNCHRONOUS attribute as part of
TS 29113
and there still exists a Fortran support method with
MPI_ASYNC_PROTECTS_NONBLOCKING set to .FALSE..
Observation of these rules by the MPI application developer is
especially recommended for
backward compatibility of existing applications that
use the mpi module or the (deprecated) mpif.h include file.
The rules are as follows:
All of these rules are valid
for the mpi_f08 and mpi
modules and
independently of whether
mpif.h uses explicit interfaces.
Advice
to implementors.
Some of these rules are already part of the Fortran 2003 standard,
some of these requirements require
the Fortran TS 29113
[47],
and
some of these requirements for MPI are beyond the scope of TS 29113.
( End of advice to implementors.)
Up: Support for Fortran
Next: Additional Support for Fortran Register-Memory-Synchronization
Previous: MPI for Different Fortran Standard Versions
Return to MPI-4.1 Standard Index
Return to MPI Forum Home Page
(Unofficial) MPI-4.1 of November 2, 2023
HTML Generated on November 19, 2023