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 dependent. 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 >> > -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/