[MPIWG Fortran] F08 and pair types?

Rolf Rabenseifner rabenseifner at hlrs.de
Sat Dec 19 09:39:55 CST 2015


Dear Jeff and Hubert,

I strongly recommend that you both check my answer from 
Dec. 11, 2015 to this topic (see below).

It stays in the Fortran world, i.e., it fits exactly to
all reasons listed by Hubert.

Best regards
Rolf

----- Forwarded Message -----
From: "Rolf Rabenseifner" <rabenseifner at hlrs.de>
To: "MPI-WG Fortran working group" <mpiwg-fortran at lists.mpi-forum.org>
Sent: Friday, December 11, 2015 11:38:00 AM
Subject: Re: [MPIWG Fortran] F08 and pair types?

A few comments - shortcut: F08 and pair types
is a good idea and helps to get MPI-4.0 more consistent.


1. After the fiasco with the MPI-3.0 BIND(C) back-end and 
   a completely rewritten Fortran back-end section without BIND(C),
   I would strongly recommend to stay within Fortran without C.

One possible reason: if somebody wants to add something 
to MAX/MINLOC with a datatype that is not directly C compatible
(like LOGICAL), then we would have an inconsistent Interface.

This applies to the type of the numerical data itself, i.e.,
the following application code would fit to the
MPI datatype handle MPI_DOUBLE_PRECISION_INT_TYPE 

  TYPE MY_DOUBLE_PRECISION_INT_TYPE
    SEQUENCE
    DOUBLE PRECISION :: VAL
    INTEGER :: LOC
  END TYPE

and we should ***never*** do

  TYPE MY_DOUBLE_PRECISION_INT_TYPE
>   SEQUENCE
>   REAL(kind=C_DOUBLE) :: VAL
>   INTEGER :: LOC
> END TYPE

and it also applies to the whole stucture, i.e., 
we should ***never*** do

  TYPE, BIND(C) :: MY_DOUBLE_PRECISION_INT_TYPE
    DOUBLE PRECISION :: VAL
    INTEGER :: LOC
  END TYPE

nor 

  TYPE, BIND(C) :: MY_DOUBLE_PRECISION_INT_TYPE
    REAL(kind=C_DOUBLE) :: VAL
    INTEGER :: LOC
  END TYPE

2. The names for Fortran and C should be clearly different.

   In Fortran we should define the following datatype handles:

   - new MPI_DOUBLE_PRECISION_INT_TYPE (29 character :-)
   - new MPI_REAL_INT and
   - existing MPI_2INTEGER 
     (but with this new meaning [i.e. SEQUENCE derived type
      with two INTEGERs], which is memory-wise identical
      to the current definition of an array of two INTEGERs)

3. It is up to the MPI library to understand the 
   alignment rules for these types.

   Implication: 
   Because we will define this through MPI_TYPE_CREATE_STRUCT
   as on MPI-3.1 page 180 lines 33-42,
   we must define MPI_TYPE_CREATE_STRUCT correctly.
   This means, that the attomatic alignment epsilon on page 105
   for Fortran types must be according to the rules 
   for Fortran derived types with the SEQUENCE attribute.
   Currently it is not defined, which is bad for old MPI-1.1
   application when BIND(C) was not yet invented.
   The text of MPI-3.1 Section 17.1.15 Fortran Derived Types
   must also reflect this now well-defined definition of 
   the Fortran alignment epsilon.

   This change is a change from undefined to defined,
   i.e., existing correct MPI applications must not
   have a problem with this change.

   Some MPI libraries do not yet calculate correct 
   Fortran alignments (in this sense), because they apply 
   C alignments to Fortran types. 
   These MPI libraries must be corrected.

4. If somebody uses MPI_FLOAT_INT together with MAX/MIN_LOC
   in Fortran, then this is already allowed based on 
   MPI-3.1 page 659 lines 1-9!

   A Fortran programmer may program the buffer 
   for MPI_FLOAT_INT with 

   TYPE, BIND(C) :: my_float_int
     REAL(kind=C_FLOAT)  :: VAL
     INTEGER(kind=C_INT) :: LOC
   END TYPE

5. All said is of course valid for all three
   mpi_f08 module, mpi module, and mpif.h


I hope that my comments are not inconflicht with
previous discussions.
 
Best regards
Rolf


----- Original Message -----
> From: "Hubert Ritzdorf" <Hubert.Ritzdorf at EMEA.NEC.COM>
> To: "MPI-WG Fortran working group" <mpiwg-fortran at lists.mpi-forum.org>
> Sent: Friday, December 18, 2015 8:34:36 PM
> Subject: Re: [MPIWG Fortran] F08 and pair types?

> Jeff Squyres wrote:
> 
>>Hmm. Ok, that's the opposite advice we got for MPI-3.0 (which was now admittedly
>>several years ago).
>> 
>>Soo... which way should it go these days?
>> 
>>- use native Fortran datatypes
>>- use C datatypes (via BIND(C))
> 
> 
> I think that MPI Fortran Interface should support native Fortran datatypes in
> pair types !
> 
> (*) We (NEC) don't know any relevant Fortran application which doesn't use
> native Fortran datatypes.
> If you switch for C Datatypes in MINLOC/MAXLOC, all application programmers must
> solve
> the portability problems (possibly loosing accuracy in reduce operations).
> 
> (*) Nearly all Fortran compilers support compile time options such as "-r8" or
> "-size real64"
> which would cause problems with the C datatypes.
> And this options are used by application programmers !
> 
> (*) C datatypes would be inconsistent with functions such as
> MPI_Type_create_f90_real.
> 
> (*) Supporting Fortran subarrays without supporting native Fortran datatypes
> doesn't make sense for me.
> 
> Hubert
> 
> 
> 
> _______________________________________________
> 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