Re: [MPI3 Fortran] Fwd: Re: Fwd: [Mpi-comments] MPI 3.0:Fortran 2008 interface - issue with the LOGICAL kind
On 3/4/13 10:34 AM, Rolf Rabenseifner wrote:
Bill,
Without BIND(C), you have to make it according to MPI-3.0 page 605, lines 31-38.
So, you are saying that MPI_SUBARRAYS_SUPPORTED = .true. is not allowed (page 605 lines 23-30)? This still does not solve the problem of the wrapper names being inaccessible when only the mpif.h include file is used. Unless, of course, the include file consists only of "use mpi", but this is problematic because of statement ordering rules. Cheers, Bill
Therefore, ticket #364 should work.
Please check again.
Best regards Rolf
----- Original Message -----
From: "Bill Long" <[email protected]> To: "MPI-3 Fortran working group" <[email protected]> Sent: Monday, March 4, 2013 5:29:24 PM Subject: [MPI3 Fortran] Fwd: Re: Fwd: [Mpi-comments] MPI 3.0:Fortran 2008 interface - issue with the LOGICAL kind As an example, this is from page 606 in the spec:
SUBROUTINE MPI_SEND(...) BIND(C,NAME=’MPI_Send_f’) USE mpi CALL PMPI_SEND(...) END SUBROUTINE
If you expect to support external linkage names like "MPI_Send_f", then the BIND(C) is required.
There is no problem with the normal MPI routines since they go through wrappers and the wrapper can convert the LOGICAL value into an int for sending on to C (and back, if necessary).
The callbacks are more difficult. But there is no need to mess up the normal routines, with the associated undesirable side effects.
Cheers, Bill
-------- Original Message -------- Subject: Re: [MPI3 Fortran] Fwd: [Mpi-comments] MPI 3.0:Fortran 2008 interface - issue with the LOGICAL kind Date: Mon, 4 Mar 2013 10:13:36 -0600 From: Bill Long <[email protected]> Reply-To: <[email protected]> Organization: Cray Inc. To: <[email protected]>
On 3/4/13 9:47 AM, Rolf Rabenseifner wrote:
Dear all,
I forget to say thank you to all of you who helped to solve this hard problem. It was a really helpful discussion. It is a pity that we could not keep the BIND(C) for all routines in mpi_f08, which was one goal with mpi_f08 and TS 29113.
In my proposal #364, we have to remove BIND(C) from - the 30 normal MPI routines with LOGICAL arguments,
I would be strongly against this, as it prevents putting the wrapper routines in a module. We will have to start over from scratch with a vastly inferior implementation, with reduced performance. (Unless you concurrently delete completely the mpif.h include file, in which case the BIND(C) on the wrappers is no needed any longer.)
- the 9 MPI routines with callbacks in the argument list, - and 10 predefined callbacks, i.e., from 49 out of 357 MPI routines.
I do not see a better solution that can be done by the MPI Forum. Better solutions are still possible for the 30 normal routines and/or for the 9 routines with callback-arguments as soon as the Fortran standard will include some additions and those additions are provided by the compilers - but if this will happen then it will not happen soon.
It was luck that all routines with buffer arguments do not have also a LOGICAL argument.
Best regards Rolf
------------------ Malcolm and all MPI implementors, and TOOLS implementors,
First Malcolm, thank you for your helpful answer. After all the discussion, the MPI-3.0 errata decision is very simple: Remove BIND(C) everywhere where LOGICAL is around.
I did it in the ticket #364 https://svn.mpi-forum.org/trac/mpi-forum-web/ticket/364
I hope that one of the implementors with Fortran knowledge goes through my proposal and returns an "okay" as a review on the ticket.
The major changes: - BIND(C) removed on all callback abstract interfaces. - BIND(C) removed on all predefined callbacks. - Creating a new routine group "MPI_TEST" for all MPI routines with LOGICAL arguments, except MPI_OP_CREATE, which is already in an own group. - Telling that the routines in the groups MPI_TEST, MPI_OP_CREATE, MPI_REGISTER_DATEREP, and MPI_COMM_KEYVAL_CREATE cannot be implemented with BIND(C) in Fortran 2008 + TS 29113 and earlier.
TOOLS implementors should be aware that I added this new routine group.
Best regards Rolf
----- Original Message -----
From: "Malcolm Cohen" <[email protected]> To: "MPI-3 Fortran working group" <[email protected]> Sent: Monday, March 4, 2013 3:56:50 AM Subject: Re: [MPI3 Fortran] Fwd: [Mpi-comments] MPI 3.0:Fortran 2008 interface - issue with the LOGICAL kind
(B1) Is it possible, that a BIND(C) routine has a dummy argument that is a non-BIND(C) ABSTRACT INTERFACE procedure argument?
That is not possible: all dummy arguments of a BIND(C) routine must be interoperable - for procedures that requires BIND(C).
It would be reasonable to extend C_FUNLOC and C_F_PROCPOINTER to permit non-interoperable procedures, similarly to how we permit non-interoperable variables in C_LOC and C_F_POINTER. Then the argument could be C_FUNPTR (by value). I don't know whether this would help you though.
(B2) Do we have any problem with the TYPE(C_PTR), VALUE dummy arguments in the ABSTRACT INTERFACE MPI_User_function on MPI-3.0 page 183 line 45 - page 184 line 3 if the we remove the BIND(C) from this ABSTRACT INTERFACE (i.e. on page 183, line 47).
No problem.
Cheers, -- ................................Malcolm Cohen, Nihon NAG, Tokyo.
_______________________________________________ mpi3-fortran mailing list [email protected] http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
-- Bill Long [email protected] 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 [email protected] http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
-- Bill Long [email protected] 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
participants (1)
-
Bill Long