Agreed!

On 04/15/2016 11:46 PM, Jeff Squyres (jsquyres) wrote:
> All sounds like good reasons to amend the Bull test suite to no longer check 
> for character and logical.  :-)
>
>
>> On Apr 15, 2016, at 5:38 PM, Larry Baker <ba...@usgs.gov> wrote:
>>
>> I also remember reading in the past about problems with C sizeof and 
>> multibyte characters.  I just looked over the C90 standard.  In C90 code, 
>> the sizeof operator returns size_t in bytes.  Except that it always returns 
>> 1 for char, signed char, or unsigned char.  For an array, C90 says sizeof 
>> returns the number of bytes.  I interpret this to mean that when the 
>> execution character set is a 16-bit multibyte character set, sizeof a char 
>> is 1, while sizeof a char[1] is 2.  I've never actually tested this.
>>
>> Any programs that marshall character strings for interchange have to be 
>> quite specific, I think, in the character set being exchanged.  I don't 
>> think MPI SIZEOF has a way to know or specify the semantics of the character 
>> set.
>>
>> Larry Baker
>> US Geological Survey
>> 650-329-5608
>> ba...@usgs.gov
>>
>>
>>
>> On 15 Apr 2016, at 2:23 PM, Larry Baker wrote:
>>
>>> Be careful what you wish for.
>>>
>>> I remember looking at this issue a while ago, but I can't remember why or 
>>> how I ran into it.  I do remember convincing myself that the MPI standard 
>>> was correct in restricting SIZEOF to numeric types.  For one thing, a 
>>> character variable type is a string container in Fortran, while in C it is 
>>> a single character.  What would be the correct interpretation for SIZEOF in 
>>> Fortran?  The maximum length?  The TRIM'd length?  What would be the 
>>> correct interpretation in C?  1?  strlen()?  strlen()+1?  The size of a 
>>> character itself may not be the same on either end of an MPI connection if, 
>>> for example, one program is compiled using 8-bit characters and the other 
>>> is compiled using uses 16-bit characters.  Interchanging strings opens up a 
>>> can of worms.  As far as logical, there is no C logical type.  In Fortran, 
>>> while the size of a logical variable is specified as a "storage unit" (the 
>>> same as an integer), the representation of true and false is unspecified, 
>>> and, thus, is processor dep
>   endent.  On VAXes, only a single bit matters; the instruction set supports 
> this logical data type.  (In C, thought there is no logical data type, the C 
> standard does specify 0=false and 1=true for the result of relational and 
> logical operators and 0=false and not 0=true for logical operator operands.)  
> This means it is problematic to exchange logical data between Fortran 
> programs (C makes no sense, since there is no logical data type) when 
> different compilers (part of what Fortran calls a processor) are used.
>>>
>>> Better to find out what discussions took place in the MPI standards 
>>> committee before adding extensions to SIZEOF.  They may very well have good 
>>> reasons to avoid character and logical data, as I concluded.
>>>
>>> Larry Baker
>>> US Geological Survey
>>> 650-329-5608
>>> ba...@usgs.gov
>>>
>>>
>>>
>>> On 15 Apr 2016, at 5:34 AM, Jeff Squyres (jsquyres) wrote:
>>>
>>>> Nadia --
>>>>
>>>> I believe that the character and logical types are not in this script 
>>>> already because the description of MPI_SIZEOF in MPI-3.1 says that the 
>>>> input choice buffer parameter is:
>>>>
>>>> IN x     a Fortran variable of numeric intrinsic type (choice)
>>>>
>>>> As I understand it (and my usual disclaimer here: I am *not* a Fortran 
>>>> expert), CHARACTER and LOGICAL types are not numeric in Fortran.
>>>>
>>>> However, we could add such interfaces as an extension.
>>>>
>>>> I just checked MPICH 3.2, and they *do* include MPI_SIZEOF interfaces for 
>>>> CHARACTER and LOGICAL, but they are missing many of the other MPI_SIZEOF 
>>>> interfaces that we have in OMPI.  Meaning: OMPI and MPICH already diverge 
>>>> wildly on MPI_SIZEOF.  :-\
>>>>
>>>> I guess I don't have a strong opinion here.  If you file a PR for this 
>>>> patch, I won't object.  :-)
>>>>
>>>>
>>>>> On Apr 15, 2016, at 3:22 AM, DERBEY, NADIA <nadia.der...@atos.net> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> The following trivial example doesn't compile because of 2 missing types
>>>>> in the MPI_SIZEOF subroutines (in mpi_sizeof.f90).
>>>>>
>>>>> [derbeyn@btp0 test]$ cat mpi_sizeof.f90
>>>>>           program main
>>>>> !        use mpi
>>>>>           include 'mpif.h'
>>>>>
>>>>>           integer ierr, sz, mpisize
>>>>>           real r1
>>>>>           integer i1
>>>>>           character ch1
>>>>>           logical l1
>>>>>
>>>>>           call MPI_INIT(ierr)
>>>>>           call MPI_SIZEOF(r1, sz, ierr)
>>>>>           call MPI_SIZEOF(i1, sz, ierr)
>>>>>           call MPI_SIZEOF(l1, sz, ierr)
>>>>>           call MPI_SIZEOF(ch1, sz, ierr)
>>>>>           call MPI_FINALIZE(ierr)
>>>>>
>>>>>           end
>>>>> [derbeyn@btp0 test]$ mpif90 -o mpi_sizeof mpi_sizeof.f90
>>>>> mpi_sizeof.f90(14): error #6285: There is no matching specific
>>>>> subroutine for this generic subroutine call.   [MPI_SIZEOF]
>>>>>           call MPI_SIZEOF(ch1, sz, ierr)
>>>>> -------------^
>>>>> mpi_sizeof.f90(15): error #6285: There is no matching specific
>>>>> subroutine for this generic subroutine call.   [MPI_SIZEOF]
>>>>>           call MPI_SIZEOF(l1, sz, ierr)
>>>>> -------------^
>>>>> compilation aborted for mpi_sizeof.f90 (code 1)
>>>>>
>>>>>
>>>>> This problem happens both on master and v2.x. The following patch seems
>>>>> to solve the issue:
>>>>>
>>>>> diff --git a/ompi/mpi/fortran/base/gen-mpi-sizeof.pl
>>>>> b/ompi/mpi/fortran/base/gen-mpi-sizeof.pl
>>>>> index 5ea3dca3..a2a99924 100755
>>>>> --- a/ompi/mpi/fortran/base/gen-mpi-sizeof.pl
>>>>> +++ b/ompi/mpi/fortran/base/gen-mpi-sizeof.pl
>>>>> @@ -145,6 +145,9 @@ sub generate {
>>>>>    # Main
>>>>>
>>>>> #############################################################################
>>>>>
>>>>> +queue_sub("character", "char", "character_kinds");
>>>>> +queue_sub("logical", "logical", "logical_kinds");
>>>>> +
>>>>>    for my $size (qw/8 16 32 64/) {
>>>>>        queue_sub("integer(int${size})", "int${size}", "int${size}");
>>>>>    }
>>>>>
>>>>> Regards,
>>>>> Nadia
>>>>>
>>>>> --
>>>>> Nadia Derbey - B1-387
>>>>> HPC R&D - MPI
>>>>> Tel: +33 4 76 29 77 62
>>>>> nadia.der...@atos.net
>>>>> 1 Rue de Provence BP 208
>>>>> 38130 Echirolles Cedex, France
>>>>> www.atos.com
>>>>> _______________________________________________
>>>>> devel mailing list
>>>>> de...@open-mpi.org
>>>>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
>>>>> Link to this post: 
>>>>> http://www.open-mpi.org/community/lists/devel/2016/04/18765.php
>>>>
>>>>
>>>> --
>>>> Jeff Squyres
>>>> jsquy...@cisco.com
>>>> For corporate legal information go to: 
>>>> http://www.cisco.com/web/about/doing_business/legal/cri/
>>>>
>>>> _______________________________________________
>>>> devel mailing list
>>>> de...@open-mpi.org
>>>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
>>>> Link to this post: 
>>>> http://www.open-mpi.org/community/lists/devel/2016/04/18766.php
>>>
>>
>
>

-- 
Nadia Derbey - B1-387
HPC R&D - MPI
Tel: +33 4 76 29 77 62
nadia.der...@atos.net
1 Rue de Provence BP 208
38130 Echirolles Cedex, France
www.atos.com

Reply via email to