[MPI3 Fortran] [Mpi-comments] MPI 3.0: Fortran 2008 interface - issue with the LOGICAL kind
Jeff Squyres (jsquyres)
jsquyres at cisco.com
Wed Mar 20 14:58:39 CDT 2013
Not only that, I think that there are some cases where tools *need* to intercept the Fortran call, not the C call. In OMPI, for example, we have a few corner cases where the Fortran MPI subroutine does *not* call the corresponding C MPI API function. Instead, it calls a back-end OMPI routine.
One obvious case that jumps to mind is anything involving a callback.
If you have integer handles in C, they might be able to get away with not swizzling/de-swizzling the arguments to the callback to the proper language. But this is not always the case.
On Mar 20, 2013, at 12:29 PM, Hubert Ritzdorf <Hubert.Ritzdorf at emea.nec.com> wrote:
> Hi,
>
> I think that Bill's proposal kills the Fortran Profiling Interface.
>
> If the user defines a
>
> subroutine MPI_Test (....)
>
> do something
>
> call PMPI _Test()
>
> do something
>
> end subroutine MPI_Test
>
> then this function will never be executed because the Fortrran compiler may have already
> inlined the MPI_Test subroutine in the original code or the module version of MPI_Test is used.
>
> Hubert
> ________________________________________
> From: mpi3-fortran-bounces at lists.mpi-forum.org [mpi3-fortran-bounces at lists.mpi-forum.org] on behalf of Rolf Rabenseifner [rabenseifner at hlrs.de]
> Sent: Wednesday, March 20, 2013 6:09 PM
> To: longb at cray.com; MPI-3 Fortran working group
> Cc: Martin Schulz
> Subject: Re: [MPI3 Fortran] [Mpi-comments] MPI 3.0: Fortran 2008 interface - issue with the LOGICAL kind
>
> This mail contains a proposal how we can solve the current
> Fortran problems and possibly making the tools people also happy.
>
> I need at least answers for
> - mpich (Bill Long),
> - OpenMPI (Jeff or Craig),
> - some tools people.
>
> Let me summarize what I've learnt so far for mpi_f08:
>
> - #364 about LOGICAL correction is a must.
> - MPI-3.0 allows BIND(C) and non-BIND(C), with the
> new restrictions in #364
> - BIND(C) needs TR29113, therefore any implementation now
> should use non-BIND(C) for all non-TR29113 compilers.
> - Most (or all) try to use the non-BIND(C) interface.
> - Best way to do this are thin wrappers in Fortran that
> internally call
> - the oficial MPI-3.0 C binding
> (here, the tools people have a problem because they
> expect to wrap the Fortran interface and may therefore
> double-wrap), or
> - or an internal MPI-3.0 C routine
> (which is half-perfect for the tools folk, because
> they have to handle the implementation-dependant
> Fortran names with underscores).
> - And at least Bill wants to include the Fortran MPI
> library routines itselves in the mpi_f08 module.
> This is in conflict with the current MPI-3.0
> linker naming rules.
>
> Implications and proposal:
> - We should rewrite the linker names section MPI-3.0 17.1.5
> with following goals:
> - Allow additionally to define that the PMPI is provided
> only on the MPI C interface and the Fortran MPI routines
> internally call the C interface;
> again, a macro definition in mpi.h tells whether this
> is chosen.
> Question: Would this cause a problem when linking a
> C or Fortran user application with some own
> MPI_Test etc. profiling routines that internally call
> PMPI_Test?
> - If Fortran profiling is done through the MPI C binding
> then there are no rules about the Fortran linker names
> needed, and therefore, one may put the thin Fortran
> wrappers into a Fortran module.
> - We can define BIND(C) for MPI routine groups as a
> future option that is currently not used.
> This would reduce the current effort for the tools people.
> Is there anybody who wants to implement one of the Fortran
> routine groups with BIND(C)?
>
> I would expect, that this is the best to solve the problem
> that #364 prohibits BIND(C) for some routines and implementors
> want to do the same method for all routines.
>
> Don't forget that BIND(C) and TR29113 is still important
> for implementing these thin wrappers internally.
>
> Without using BIND(C) on the official mpi_f08 and mpi module
> interface, some features of TR29113 are not used:
> - the extension for interoperabple CHARACTER(LEN=*),
> - the extension for OPTIONAL dummy arguments.
>
> Other TR29113 features are heavily used:
> - The DIMENSION(..), TYPE(*) is needed for some internal
> C-written MPI_Isend_desc.
> - The ASYNCHRONOUS usage for communication buffers.
>
> Should we go in this direction?
>
> Best regards
> Rolf
>
>
> ----- Original Message -----
>> From: "Bill Long" <longb at cray.com>
>> To: "Jeff Squyres (jsquyres)" <jsquyres at cisco.com>
>> Cc: "Martin Schulz" <schulzm at llnl.gov>, "MPI-3 Fortran working group" <mpi3-fortran at lists.mpi-forum.org>
>> Sent: Wednesday, March 20, 2013 4:01:52 PM
>> Subject: Re: [MPI3 Fortran] [Mpi-comments] MPI 3.0: Fortran 2008 interface - issue with the LOGICAL kind
>> On 3/20/13 8:26 AM, Jeff Squyres (jsquyres) wrote:
>>> On Mar 20, 2013, at 6:25 AM, Bill Long <longb at cray.com> wrote:
>>>
>>>> interface !--> MPI_Test
>>>>
>>>> ! int MPI_Test(MPI_Request *request, int *flag, MPI_Status
>>>> *status);
>>>>
>>>> Function MPI_Test_C( request, flag, status) &
>>>> BIND(C, name="MPI_Test") RESULT (res)
>>>> import :: C_request, c_int, MPI_Status_C
>>>> integer(C_request) :: request
>>>
>>> This is not correct. You cannot assume that MPI handles are integers
>>> (they're pointers in Open MPI).
>>
>>
>> This is correct for mpich. OpenMPI would evidently have a different
>> version. But the concept is still the same - make a correct interface
>> to the C library routine, however it is defined by the implementation,
>> and then call that from a thin Fortran wrapper that takes care of the
>> issues related to LOGICAL, the use of default INTEGER, and OPTIONAL
>> arguments.
>>
>> Cheers,
>> Bill
>>
>>
>>>
>>
>> --
>> Bill Long longb at cray.com
>> Fortran Technical Support & voice: 651-605-9024
>> Bioinformatics Software Development fax: 651-605-9142
>> Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101
>>
>>
>> _______________________________________________
>> mpi3-fortran mailing list
>> mpi3-fortran at lists.mpi-forum.org
>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
>
> --
> Dr. Rolf Rabenseifner . . . . . . . . . .. email rabenseifner at hlrs.de
> High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530
> University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832
> Head of Dpmt Parallel Computing . . . www.hlrs.de/people/rabenseifner
> Nobelstr. 19, D-70550 Stuttgart, Germany . . . . (Office: Room 1.307)
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
>
>
> Click https://www.mailcontrol.com/sr/oUBxarVXlArGX2PQPOmvUrwgXREt4LZXdolWasoQmWDbX5aSB7TlS9if4+7oDyxaXeCWFTId+Sn5pl0FDW8fzw== to report this email as spam.
>
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
--
Jeff Squyres
jsquyres at cisco.com
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/
More information about the mpiwg-fortran
mailing list