[MPIWG Fortran] Type of MPI_Status

Jeff Squyres (jsquyres) jsquyres at cisco.com
Mon Mar 17 13:13:00 CDT 2014


I do not believe this is true in all cases.

If an 8-byte fortran integer is assigned a very large value, Bad Things will happen when it is assigned to a 4-byte C integer.

For example, MPI-3 says it is perfectly legal to assign 2^33 to MPI_VAL in a handle, like this:

  type(MPI_Comm) :: comm
  comm%MPI_VAL = 8589934592

*if you know that a default integer is 8 bytes* (e.g., if you compiled with -i8).

Granted, an MPI implementation may never assign a value that large to MPI_VAL, but that doesn't mean that an app can't use it as a general integer storage location.

And if MPI_VAL is not actually 8 bytes long because of an implementation decision, the above code will result in a compiler error because 2^33 is out of the range of a 4-byte INTEGER.



On Mar 15, 2014, at 8:38 AM, Rolf Rabenseifner <rabenseifner at hlrs.de> wrote:

> Dear Junchao, 
> 
> As long as you use status%MPI_SOURCE in an expression, 
> all is fine.
> 
> If you pass it to an application routine dummy argument 
> that is defined as INTEGER and your status%MPI_SOURCE 
> is define as  INTEGER(C_INT) then  you may get compiler 
> warnings or errors if size of both INTEGER types is different.
> 
> CALL foo(status%MPI_SOURCE)
> 
> with
> SUBROUTINE foo(rank)
> INTEGER :: rank
> 
> Best regards
> Rolf
> 
> 
> ----- Original Message -----
>> From: "Junchao Zhang" <jczhang at mcs.anl.gov>
>> To: "MPI-WG Fortran working group" mpi-forum.org>
>> Sent: Saturday, March 15, 2014 11:54:38 AM
>> Subject: Re: [MPIWG Fortran] Type of MPI_Status
>> 
>> 
>> 
>> My point is, with the C_INT implementation of MPI_Status, there
>> should be no compilation warnings AND runtime errors, even if
>> INTEGER kind is not c_int, since users can only operate MPI_Status
>> through their public interfaces, in which we take care of data
>> conversion.
>> 
>> 
>> But for other arguments of type INTEGER or array of INTEGERs, I can
>> not change their type. Users pass in an array of INTEGERs, I can not
>> pretend they are c_int and don't do conversion.
>> 
>> 
>> 
>> --Junchao Zhang
>> 
>> 
>> On Sat, Mar 15, 2014 at 3:33 AM, Rolf Rabenseifner <
>> rabenseifner at hlrs.de > wrote:
>> 
>> 
>> Junchao,
>> 
>> With the erratum ticket #415, your implementation
>> with INTEGER(C_INT) is clearly wrong,
>> but who cares as long as an application programmer cannot
>> write an application code that produces compilation errors
>> or warnings or infos due to your wrong implementation
>> of TYPE(MPI_Status).
>> 
>> I do not exactly now the rules about Fortran subroutine
>> prototype and overloading where handing over a INTEGER rank
>> or a INTEGER(C_INT) rank may cause to choose different interfaces.
>> 
>> Maybe that Bill Long should comment on such strange things
>> before you define any field within TYPE(MPI_Status) or
>> any dummy argument in a routine declaration as INTEGER(C_INT)
>> instead of INTEGER as defined in MPI-3.0.
>> 
>> 
>> Best regards
>> Rolf
>> 
>> ----- Original Message -----
>>> From: "Junchao Zhang" < jczhang at mcs.anl.gov >
>>> To: "MPI-WG Fortran working group" mpi-forum.org >
>> 
>> 
>>> Sent: Saturday, March 15, 2014 12:11:35 AM
>>> Subject: Re: [MPIWG Fortran] Type of MPI_Status
>>> 
>>> 
>>> 
>>> Not sure if it is worth discussing. Even if INTEGER and C_INT are
>>> of
>>> different size, I think I can still use C_INT in MPI_Status.
>>> 
>>> 
>>> 
>>> TYPE, BIND(C) :: MPI_Status
>>> INTEGER(C_INT) :: MPI_SOURCE, MPI_TAG, MPI_ERROR
>>> ... ! other fields
>>> END TYPE MPI_Status
>>> 
>>> 
>>> Since MPI_Status is a derived datatype, users access it through its
>>> public interfaces(i.e., %MPI_SOURCE, ..., MPI_STATUS_SIZE).
>>> As long as MPI_STATUS_SIZE >= sizeof(MPI_STATUS)/sizeof(INTEGER),
>>> who
>>> cares its internals.
>>> 
>>> 
>>> 
>>> 
>>> 
>>> --Junchao Zhang
>>> 
>>> 
>>> On Thu, Mar 13, 2014 at 10:56 AM, Rolf Rabenseifner <
>>> rabenseifner at hlrs.de > wrote:
>>> 
>>> 
>>> Jeff is right.
>>> Bill's theoretical statement is also correct.
>>> 
>>> And ticket#415 is also correct because it resolves an inconsistency
>>> within the mpi_f08 interface.
>>> 
>>> Strange theoretical discussions are also there for
>>> long Fortran INTEGER may not be identical with some shorter
>>> INTEGER(C_int).
>>> As a side effect also solved by this ticket.
>>> 
>>> 
>>> Rolf
>>> 
>>> ----- Original Message -----
>>> 
>>>> From: "Jeff Hammond" < jeff.science at gmail.com >
>>>> To: "MPI-WG Fortran working group" mpi-forum.org >
>>>> Sent: Thursday, March 13, 2014 4:12:56 PM
>>>> Subject: Re: [MPIWG Fortran] Type of MPI_Status
>>>> 
>>>> MPI should test for interoperability of Fortran's default integer
>>>> and
>>>> light the machine room on fire if it is not.
>>>> 
>>>> Jeff
>>>> 
>>>> On Thu, Mar 13, 2014 at 8:58 AM, Bill Long < longb at cray.com >
>>>> wrote:
>>>>> This does raise an earlier issue that it is
>>> 
>>> 
>>>>> possible that Fortran’s default INTEGER is not an interoperable
>>>>> type, and thus the MPI_Status type should not be a BIND(C) type
>>>>> if
>>>>> it has INTEGER components. Having BIND(C) does allow you to
>>>>> declare a C global name MPI_STATUS_IGNORE in Fortran, which
>>>>> solves
>>>>> one problem nicely. I don’t see any advantage to having INTEGER
>>>>> components (as opposed to INTEGER(C_Int), for example). So this
>>>>> seems to represent the worse of the two options.
>>>>> 
>>>>> Cheers,
>>>>> Bill
>>>>> 
>>>>> 
>>>>> 
>>>>> On Mar 13, 2014, at 8:36 AM, Jeff Squyres (jsquyres)
>>>>> < jsquyres at cisco.com > wrote:
>>>>> 
>>>>>> Done. Good catch:
>>>>>> 
>>>>>> https://svn.mpi-forum.org/trac/mpi-forum-web/ticket/415
>>>>>> 
>>>>>> This is a trivial ticket, but if you could make sure it's ok,
>>>>>> I'll
>>>>>> send it to the mpi-forum list so that it can get added to the
>>>>>> next meeting's agenda.
>>>>>> 
>>>>>> 
>>>>>> On Mar 13, 2014, at 1:51 AM, Rolf Rabenseifner
>>>>>> < rabenseifner at hlrs.de > wrote:
>>>>>> 
>>>>>>> Jeff and Junchao,
>>>>>>> 
>>>>>>> it is a missing word INTEGER in this part of the sentence
>>>>>>> 
>>>>>>> In whole MPI these three values are in Fortran INTEGER and
>>>>>>> nothing else
>>>>>>> 
>>>>>>> Junchao, thank you for the hint that an erratum is neede
>>>>>>> to prevent from such misinterpretation
>>>>>>> 
>>>>>>> Jeff, please can you file the errata ticket resulting in
>>>>>>> 
>>>>>>> ... containing three public INTEGER fields named ...
>>>>>>> 
>>>>>>> Best regards
>>>>>>> Rolf
>>>>>>> 
>>>>>>> 
>>>>>>> ----- Original Message -----
>>>>>>>> From: "Junchao Zhang" < jczhang at mcs.anl.gov >
>>>>>>>> To: "MPI-WG Fortran working group"
>>> 
>>> 
>>>>>>>> mpi-forum.org >
>>>>>>>> Sent: Thursday, March 13, 2014 4:49:49 AM
>>>>>>>> Subject: [MPIWG Fortran] Type of MPI_Status
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Hello,
>>>>>>>> 
>>>>>>>> 
>>>>>>>> p30 of MPI3 says "In Fortran with USE mpi or INCLUDE
>>>>>>>> ’mpif.h’,
>>>>>>>> status
>>>>>>>> is an array of INTEGERs of size MPI_STATUS_SIZE. ..., With
>>>>>>>> Fortran
>>>>>>>> USE mpi_f08, status is defined as the Fortran BIND(C)
>>>>>>>> derived
>>>>>>>> type
>>>>>>>> TYPE(MPI_Status) containing three public fields named
>>>>>>>> MPI_SOURCE
>>>>>>>> ,
>>>>>>>> MPI_TAG , and MPI_ERROR"
>>>>>>>> 
>>>>>>>> In other words, it does't say type of the three public
>>>>>>>> fields
>>>>>>>> must be
>>>>>>>> INTEGER. So, in mpi_f08, can I declare MPI_Status as
>>>>>>>> 
>>>>>>>> 
>>>>>>>> TYPE, BIND(C) :: MPI_Status
>>>>>>>> INTEGER(C_INT) :: MPI_SOURCE, MPI_TAG, MPI_ERROR
>>>>>>>> ... ! other fields
>>>>>>>> END TYPE MPI_Status
>>>>>>>> 
>>>>>>>> 
>>>>>>>> I find it makes MPI_Status binding easier. Since this type
>>>>>>>> is
>>>>>>>> interoperable with C, I do not need to allocate temp
>>>>>>>> variables
>>>>>>>> to do
>>>>>>>> type conversion when INTEGER is not a C_INT.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --Junchao Zhang
>>>>>>>> _______________________________________________
>>>>>>>> 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 Suport & 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
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Jeff Hammond
>>>> jeff.science at gmail.com
>>>> _______________________________________________
>>>> 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
>>> 
>>> _______________________________________________
>>> 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
>> 
>> _______________________________________________
>> 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/




More information about the mpiwg-fortran mailing list