20.1.10. Problems With Fortran Bindings for MPI
Up: Support for Fortran
Next: Problems Due to Strong Typing
Previous: Communication With Size-specific Types
This section discusses a number of problems that may arise
when using MPI in a Fortran program. It is intended as
advice to users, and clarifies how MPI interacts with
Fortran. It is intended to clarify, not add to, this standard.
As noted in the original MPI specification, the interface violates
the Fortran standard in several ways. While these may cause few problems
for Fortran 77 programs, they become more significant for Fortran 90
programs, so that users must exercise care when using new Fortran 90
features.
With Fortran 2008 and the semantics defined in
TS 29113, most violations
are resolved, and this is hinted at in an addendum to each item.
The violations were originally adopted and have been
retained because they are important for the usability of MPI. The
rest of this section describes the potential problems in detail.
The following MPI features are inconsistent with Fortran 90 and Fortran 77.
1. An MPI subroutine with a choice argument may be
called with different argument types.
When using the mpi_f08 module
together with a compiler that supports Fortran 2008 with
TS 29113, this problem is resolved.
2. An MPI subroutine with an assumed-size dummy argument may
be passed an actual scalar argument.
This is only solved for choice buffers through the use of DIMENSION(..).
3. Nonblocking and split-collective MPI routines assume that actual arguments are
passed by address or descriptor and that arguments and the associated data are not copied on
entrance to or exit from the subroutine.
This problem is solved with the use of the
ASYNCHRONOUS attribute.
4. An MPI implementation may read or modify user data (e.g.,
communication buffers used by nonblocking communications) concurrently
with a user program that is executing outside
of MPI calls.
This problem is resolved by relying on the extended
semantics of the ASYNCHRONOUS attribute as specified in
TS 29113.
5. Several named ``constants,'' such as MPI_BOTTOM,
MPI_IN_PLACE,
MPI_STATUS_IGNORE, MPI_STATUSES_IGNORE,
MPI_ERRCODES_IGNORE,
MPI_UNWEIGHTED,
MPI_WEIGHTS_EMPTY,
MPI_ARGV_NULL, and
MPI_ARGVS_NULL
are not ordinary Fortran constants and require a special
implementation. See Section Named Constants for more information.
6. The memory allocation routine MPI_ALLOC_MEM cannot
be used from
Fortran 77/90/95
without a language extension (for example, Cray pointers) that allows
the allocated memory to be associated with a Fortran variable.
Therefore, address sized integers were used in MPI-2.0 -- MPI-2.2.
In Fortran 2003, TYPE(C_PTR) entities were added,
which allow a standard-conforming implementation of the semantics of MPI_ALLOC_MEM.
In MPI-3.0 and later, MPI_ALLOC_MEM
has an additional, overloaded interface to support this
language feature. The use of Cray pointers is deprecated.
The mpi_f08 module only supports TYPE(C_PTR) pointers.
Additionally, MPI is inconsistent with Fortran 77 in a number of
ways, as noted below.
- MPI identifiers exceed 6 characters.
- MPI identifiers may contain underscores after the first character.
- MPI requires an include file, mpif.h (deprecated). On systems
that do not support include files, the implementation should specify
the values of named constants.
- Many routines in
MPI
have KIND-parameterized integers
(e.g., MPI_ADDRESS_KIND and MPI_OFFSET_KIND)
that hold address information.
On systems that do not support Fortran 90-style parameterized
types, INTEGER*8 or INTEGER should be used instead.
MPI-1 contained several routines that take address-sized information
as input or return address-sized information as output. In C
such arguments were of type MPI_Aint and in Fortran of
type INTEGER. On machines where integers are smaller than
addresses, these routines can lose information. In MPI-2 the
use of these functions has been deprecated
and they have been replaced by
routines taking INTEGER arguments of KIND=MPI_ADDRESS_KIND.
A number of MPI-2 functions also take INTEGER arguments
of nondefault KIND. See Section Language Binding and
Section Type Constructors with Explicit Addresses for more information.
Sections Problems Due to Strong Typing through Permanent Data Movement
describe several problems in detail that concern the interaction of MPI and Fortran as well as their solutions.
Some of these solutions require special capabilities from the compilers.
Major requirements are summarized in
Section Requirements on Fortran Compilers.
Up: Support for Fortran
Next: Problems Due to Strong Typing
Previous: Communication With Size-specific Types
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