[MPI3 Fortran] Start discussing new Fortran binding
jsquyres at cisco.com
Thu Feb 14 20:22:33 CST 2008
On Feb 14, 2008, at 9:03 PM, Craig E. Rasmussen wrote:
>>> ! We need to figure out the type of MPI handles.
>>> ! Currently I'm leaning toward TYPE(C_PTR) rather than
>>> ! the INTEGER(MPI_HANDLE_KIND) Jeff and I used in our paper.
>> Will this be able to handle MPI implementations that use integers as
>> MPI handles in C?
> So are we talking about global constants like MPI_COMM_WORLD? If so
> looks like we can use the same global integers that are used in C.
That's the point, though -- some MPI implementations (e.g., Open MPI)
use pointers for MPI handles in C, while others (e.g., MPICH) use C
int's. The standard doesn't specify what the type has to be, so
implementations do what they please.
> would just initialize MPI_COMM_WORLD in Fortran MPI_Init to the
> address of
> the global C integer. If you can grok the Fortran, I've included
> the code
> ! the global integer in OMPI
> integer, bind(C) :: ompi_mpi_comm_world
> ! the declaration of the handle in Fortran
> type(C_PTR) :: MPI_COMM_WORLD
> ! the initialization in MPI_Init()
> MPI_COMM_WORLD = C_LOC(ompi_mpi_comm_world)
If I grok this, it looks like the Fortran binding for MPI_COMM_WORLD
will always be a C pointer. How would that translate automatically
back to the C bindings if the back-end C type is an integer? I
thought the goal was to make the C and Fortran types be the same (or
automatically translatable by the compiler).
(note that OMPI uses pointers in C, so ompi_mpi_comm_world is a
pointer, not an integer. But you could s/ompi_mpi_comm_world/
mpich_mpi_comm_world/ and have a valid-ish example)
More information about the mpiwg-fortran