[MPIWG Fortran] F08 and pair types?
Rolf Rabenseifner
rabenseifner at hlrs.de
Thu Dec 10 06:39:33 CST 2015
> 3. Deprecate the 2 old MPI datatypes that we don't want to encourage use of anymore:
>
> -----
> MPI_2REAL
> MPI_2DOUBLE_PRECISION
I would prefer to use the same wording as for mpif.h, i.e.:
The use of MPI_2REAL and MPI_2DOUBLE_PRECISION
is strongly discouraged and may be deprecated
in a future Version of MPI.
See MPI-3.1 page 611 lines 20-21.
Rolf
----- Original Message -----
> From: "longb" <longb at cray.com>
> To: "MPI-WG Fortran working group" <mpiwg-fortran at lists.mpi-forum.org>
> Sent: Tuesday, December 8, 2015 10:14:04 PM
> Subject: Re: [MPIWG Fortran] F08 and pair types?
> On Dec 8, 2015, at 2:13 PM, Jeff Squyres (jsquyres) <jsquyres at cisco.com> wrote:
>
>> We talked about this in detail at the SJC meeting this morning.
>>
>> 1. In MPI 3.1 section 5.9.4 p180, the following types are defined for fortran:
>>
>> -----
>> MPI_2REAL
>> MPI_2DOUBLE_PRECISION
>> MPI_2INTEGER
>> -----
>>
>> The following types are defined for C:
>>
>> -----
>> MPI_FLOAT_INT
>> MPI_DOUBLE_INT
>> MPI_LONG_INT
>> MPI_2INT
>> MPI_SHORT_INT
>> MPI_LONG_DOUBLE_INT
>> ——
>
>
> I assume the C versions are structs with two members of the obvious types. One
> could mimic these in Fortran:
>
> use,intrinsic :: iso_c_binding
>
> type,bind(c) :: mpi_float_int ! the bind(c) ensures the C compiler’s memory
> layout
> real(c_float) :: val
> integer(c_int) :: loc
> end type
>
> and facilitate calling the C routines directly.
>
> When you say REAL , DOUBLE PRECISION, and INTEGER, do you mean the “default”
> ones. I.e. the ones with a bit-size that can depend on compiler options?
> That complicates things, combinatorially if the compile specifies -r8, -i4,
> for example.
>
>
>>
>> 2. What Jeff Hammond asks is quite reasonable; it seems like we should use the
>> Fortran derived types for MINLOC and MAXLOC functionality. The old Fortran
>> types (2REAL, 2DOUBLE_PRECISION, 2INTEGER) exist because there were no derived
>> types back in the early 90's.
>>
>> I think we can make three proposals (NOTE: we need to cross reference these
>> proposals with the RMA and collective working groups, but I want to get the
>> Fortran stuff correct first):
>>
>> 2a. Change the definition of MPI_INTEGER from
>>
>> -----
>> INTEGER FOO(2)
>> -----
>>
>> to (please correct my fortran syntax; you all know I have some of it wrong
>> below...)
>>
>> ------
>> TYPE :: MPI_2INTEGER_TYPE, SEQUENCE
>> INTEGER VAL
>> INTEGER LOC
>> END TYPE
>> ——
>
>
> This syntax would be
>
> TYPE :: MPI_2INTEGER_TYPE
> SEQUENCE
> NTEGER VAL
> INTEGER LOC
> END TYPE
>
>
> However, apart from using default types, most Fortran gurus would be revolted at
> the use of the archaic SEQUENCE specification. This is something that should
> already have been on the MPI deprecated list.
>
>
>
>>
>> Craig assures me that these two Fortran types are exactly the same in memory
>> representation. Hence, even though we're technically changing the back-end
>> representation of MPI_2INTEGER, we're changing it to an exactly equivalent
>> definition. Hence, old codes will not break -- we're just updating to use
>> newer Fortran syntax.
>>
>> Also, create two new types:
>>
>> -----
>> TYPE :: MPI_REAL_INTEGER_TYPE, SEQUENCE
>> REAL VAL
>> INTEGER LOC
>> END TYPE
>>
>> TYPE :: MPI_DOUBLE_PRECISION_INTEGER_TYPE, SEQUENCE
>> DOUBLE PRECISION VAL
>> INTEGER LOC
>> END TYPE
>> -----
>>
>> And MPI datatypes corresponding to these two new types: MPI_REAL_INTEGER,
>> MPI_DOUBLE_PRECISION_INTEGER
>>
>> Note: with this one old type (2INTEGER) and the 2 new types (REAL_INTEGER and
>> DOUBLE_PRECISION_INTEGER) correspond to the C types MPI_2INT, MPI_FLOAT_INT,
>> MPI_DOUBLE_INT, respectively.
>>
>> 2b. Create three additional new Fortran types to make parity with the remaining
>> C types (MPI_LONG_INT, MPI_SHORT_INT, MPI_LONG_DOUBLE_INT) -- the names below
>> are completely up for negotiation, and may even be longer than 31 characters:
>>
>> -----
>> TYPE :: MPI_LONGINTEGER_INTEGER_TYPE, SEQUENCE
>> INTEGER(KIND=whatever) VAL
>> INTEGER LOC
>> END TYPE
>>
>> TYPE :: MPI_SHORTINTEGER_INTEGER_TYPE, SEQUENCE
>> INTEGER(KIND=whatever) VAL
>> INTEGER LOC
>> END TYPE
>>
>> TYPE :: MPI_QUAD_PRECISION_INTEGER_TYPE, SEQUENCE
>> DOUBLE PRECISION(KIND=whatever) VAL
>
> REAL(KIND=whatever) VAL
>
> The single, double, and quad versions would be identical except for the values
> for “whatever”.
>
>
>> INTEGER LOC
>> END TYPE
>> -----
>>
>> These 3 new Fortran types would then make Fortran support the same types as C.
>
> I would recommend use of the bind(c) types instead, as illustrated above, if you
> want to duplicate the C types.
>
>>
>> 3. Deprecate the 2 old MPI datatypes that we don't want to encourage use of
>> anymore:
>>
>> -----
>> MPI_2REAL
>> MPI_2DOUBLE_PRECISION
>
> Seems like a good idea.
>
> Cheers,
> Bill
>
>> -----
>>
>> Thoughts?
>>
>>
>>
>>> On Dec 8, 2015, at 10:31 AM, Rolf Rabenseifner <rabenseifner at hlrs.de> wrote:
>>>
>>> Sorry, but I was too fast with my negative answer.
>>> Yes, we have both arguments in the reduction
>>> and therefore it would be simple to add a new
>>> datatype to the list of allowed datatypes for
>>> MIN/MAXLOC in Fortran.
>>>
>>> Deprecation is too expensive and there is no need.
>>>
>>> Rolf
>>>
>>>
>>> ----- Original Message -----
>>>> From: "Rolf Rabenseifner" <rabenseifner at hlrs.de>
>>>> To: "MPI-WG Fortran working group" <mpiwg-fortran at lists.mpi-forum.org>
>>>> Sent: Tuesday, December 8, 2015 7:22:45 PM
>>>> Subject: Re: [MPIWG Fortran] F08 and pair types?
>>>
>>>> I'm sorry, but I expect that deprecation of a language binding
>>>> is not possible for a feature that is still valid in other languages (here C).
>>>>
>>>> This means, that MINLOC and MAXLOC are as they are defined
>>>> and there is no reason to deprecate them.
>>>> They are not wrong and nobody want to pay the maintenance costs
>>>> for modifying existing applications that use MIN/MAXLOC.
>>>>
>>>> The only way to do it better, is to add a new feature, e.g.,
>>>> MINLOC_F08 and MAXLOC_F08 which is valid only for the new
>>>> mpi_f08 module.
>>>>
>>>> Rolf
>>>>
>>>> ----- Original Message -----
>>>>> From: "Craig Rasmussen" <rasmus at cas.uoregon.edu>
>>>>> To: "MPI-WG Fortran working group" <mpiwg-fortran at lists.mpi-forum.org>
>>>>> Sent: Tuesday, December 8, 2015 6:30:37 PM
>>>>> Subject: Re: [MPIWG Fortran] F08 and pair types?
>>>>
>>>>> The old stuff could be deprecated because all existing compilers that I know of
>>>>> support user-defined types. I assume that "deprecated" means that it still
>>>>> exists in libraries for legacy apps but is no longer really defined in the
>>>>> standard.
>>>>>
>>>>> -craig
>>>>>
>>>>> On Tue, Dec 8, 2015 at 9:19 AM, Craig Rasmusen < rasmus at cas.uoregon.edu > wrote:
>>>>>
>>>>>
>>>>>
>>>>> Fortran is a modern language? Wut...
>>>>>
>>>>> Actually seems like a simple and good change. For example, could define:
>>>>>
>>>>> MPI_REAL_INT and MPI_INTEGER_INT
>>>>>
>>>>> However, I'm not sure what would be in the structs (user-defined types). I'll
>>>>> have to ask Squyres what the text following
>>>>>
>>>>> "The datatype MPI_FLOAT_INT is as if defined by the following sequence of
>>>>> instructions"
>>>>>
>>>>> means.
>>>>>
>>>>> -craig
>>>>>
>>>>> On Mon, Dec 7, 2015 at 4:20 PM, Jeff Hammond < jeff.science at gmail.com > wrote:
>>>>>
>>>>>
>>>>>
>>>>> I have a reasonable understanding of why the legacy Fortran bindings use 2REAL,
>>>>> 2DOUBLE_PRECISION and 2INTEGER with {MAX,MIN}LOC reductions.
>>>>>
>>>>> Doesn't modern Fortran provide a way to create struct-like things along the
>>>>> lines of C, such that more appropriate pair types could be used for these?
>>>>>
>>>>> The relevant text is section 5.9.4 of MPI 3.1.
>>>>>
>>>>> Jeff
>>>>>
>>>>> --
>>>>> Jeff Hammond
>>>>> jeff.science at gmail.com
>>>>> http://jeffhammond.github.io/
>>>>>
>>>>> _______________________________________________
>>>>> mpiwg-fortran mailing list
>>>>> mpiwg-fortran at lists.mpi-forum.org
>>>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-fortran
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> mpiwg-fortran mailing list
>>>>> mpiwg-fortran at lists.mpi-forum.org
>>>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-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)
>>>> _______________________________________________
>>>> mpiwg-fortran mailing list
>>>> mpiwg-fortran at lists.mpi-forum.org
>>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-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)
>>> _______________________________________________
>>> mpiwg-fortran mailing list
>>> mpiwg-fortran at lists.mpi-forum.org
>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-fortran
>>
>>
>> --
>> Jeff Squyres
>> jsquyres at cisco.com
>> For corporate legal information go to:
>> http://www.cisco.com/web/about/doing_business/legal/cri/
>>
>> _______________________________________________
>> mpiwg-fortran mailing list
>> mpiwg-fortran at lists.mpi-forum.org
>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-fortran
>
> 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
>
>
> _______________________________________________
> mpiwg-fortran mailing list
> mpiwg-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-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)
More information about the mpiwg-fortran
mailing list