Some of the datatype accessors and constructors have arguments of type MPI_Aint (in C) or MPI::Aint in C++, to hold addresses. The corresponding arguments, in Fortran, have type INTEGER. This causes Fortran and C/C++ to be incompatible, in an environment where addresses have 64 bits, but Fortran INTEGERs have 32 bits.
This is a problem, irrespective of
interlanguage issues. Suppose that a Fortran process has an address
space of 4 GB. What should be the value returned in Fortran by
MPI_ADDRESS, for a variable with an address above
?
The design described here addresses this issue, while maintaining
compatibility with current Fortran codes.
The constant MPI_ADDRESS_KIND is defined so that, in Fortran
90,
INTEGER(KIND=MPI_ADDRESS_KIND))
is an address sized integer type (typically, but not necessarily,
the size of an INTEGER(KIND=MPI_ADDRESS_KIND) is 4 on 32 bit address machines and 8 on 64
bit address machines).
Similarly, the constant
MPI_INTEGER_KIND is defined so that
INTEGER(KIND=MPI_INTEGER_KIND) is a default size
INTEGER.
There are seven functions that have address arguments:
MPI_TYPE_HVECTOR,
MPI_TYPE_HINDEXED,
MPI_TYPE_STRUCT,
MPI_ADDRESS,
MPI_TYPE_EXTENT
MPI_TYPE_LB and
MPI_TYPE_UB.
Four new functions are provided to supplement the first four functions
in this list. These functions are described in
Section 4.14, page .
The remaining three functions are supplemented by the
new function
MPI_TYPE_GET_EXTENT, described in
that same section.
The new functions have the same functionality as the old functions
in C/C++, or on Fortran systems where default INTEGERs are
address sized. In Fortran, they accept arguments of type
INTEGER(KIND=MPI_ADDRESS_KIND),
wherever arguments of type
MPI_Aint
are used in C. On
Fortran 77 systems that do not support the Fortran 90
KIND notation, and where addresses are
64 bits whereas default INTEGERs are 32 bits,
these arguments will be
of an appropriate integer type. The old functions will continue to be
provided, for backward compatibility. However, users are encouraged to switch to
the new functions, in Fortran, so as to avoid problems on systems with
an address range
, and to provide compatibility across languages.
MPI-Standard for MARMOT