[MPIWG Fortran] MPI_Fint in the ABI
Jeff Hammond
jeff.science at gmail.com
Wed Aug 16 03:09:32 CDT 2023
As we all know, Fortran users are permitted to change the size of INTEGER
with compiler flags. This creates a problem for the MPI C ABI.
I have considered three options and would like your opinions on them:
1. MPI_Fint is defined to be a C int in the standard ABI. This means MPI
implementations that elect to provide an ILP64 MPI Fortran ABI on an
I32LP64 system, for example, must not call this an implementation of the
standard ABI.
This would make a lot of things easier, but it might cause problems in the
rare cases where users are using ILP64 in Fortran and using C code that
actually uses MPI_Fint.
2. MPI_Fint ceases to be a compile-time fixed type in the standard ABI.
The C code that uses MPI_Fint must make an MPI library call to figure out
the size and do all of the necessary things to call the correct size.
3. MPI_Fint is not a fixed size but the standard ABI specifies that Fortran
handle values must always fit into the range of a C int and we rely on the
pass-by-value behavior of all the f2c/c2f APIs to behave properly when they
are truncated.
This is my preference but it breaks Example 19.11 in a serious way, because
that user code makes use of a MPI_Fint pointer. However, this code isn't
standard-compliant and relies on universal but non-standard argument
passing conventions in Fortran. Writing a standard-compliant interface
from Fortran to C - by doing the cast to INTEGER(kind=c_int) in Fortran -
would resolve this.
Example 19.11 is awful (https://github.com/mpi-forum/mpi-issues/issues/739)
but it is nonetheless important to instruct users that if Option 3 is
implemented, they need to do the casting to INTEGER(kind=c_int) and know
that this is safe with the standard ABI.
None of these options is perfect. I'm not sure how much code is even
impacted by MPI_Fint so it's hard to know which option breaks the most
stuff, although Option 2 seems the least desirable in any case.
Thanks,
Jeff
--
Jeff Hammond
jeff.science at gmail.com
http://jeffhammond.github.io/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-fortran/attachments/20230816/8e1bed89/attachment.html>
More information about the mpiwg-fortran
mailing list