Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] Wrong Endianness in Open MPI for external32 representation
From: Gilles Gouaillardet (gilles.gouaillardet_at_[hidden])
Date: 2014-04-30 00:38:16


Edgar and Christoph,

i do not think ROMIO supports this yet.

from ompi/mca/io/romio/romio/README
"This version of ROMIO includes everything defined in the MPI I/O
chapter except support for file interoperability [...]"

i also ran ompi/mca/io/romio/romio/test/external32.c :

on a x86_64 box (little endian)
$ ./external32
native datarep is LITTLE ENDIAN
external32 datarep is LITTLE ENDIAN
internal datarep is LITTLE ENDIAN

on a ppc64 box (big endian)
$ ./external32
native datarep is BIG ENDIAN
external32 datarep is BIG ENDIAN
internal datarep is BIG ENDIAN

that being said :
with mpich (trunk), on a x86_64 box :
$ ./external32.mpich
native datarep is LITTLE ENDIAN
external32 datarep is BIG ENDIAN
internal datarep is LITTLE ENDIAN

here is the output of mpi-io-external32 (with mpich) :
$ ./mpi-io-external32.mpich
Output file: mpi-io-external32.dat
[-1] Block at address 0x0000000000c6f0e8 is corrupted (probably write
past end)
[-1] Block being freed allocated in
rc/mpich/src/mpi/romio/mpi-io/mpiu_external32.c[159]
[-1] Block cookie should be f0e0d0c9 but was e2ffffff4c054000

$ od -t x1 ./mpi-io-external32.dat
0000000 ff ff ff e2 00 00 00 00 40 30 40 00

MPI_INT was written big endian (good)
but
MPI_DOUBLE was written little endian (bad)

my conclusion is that the ROMIO included in OpenMPI is a few steps
behind the one provided with MPICH
and/but MPICH ROMIO does not fully support file interoperability

Cheers,

Gilles

On 2014/04/29 22:27, Edgar Gabriel wrote:
> the way you launch the app, you will be using ROMIO, and I am not 100%
> sure about how the data representation stuff is integrated with OMPI. I
> am pretty sure that we are not doing the right thing for OMPIO, but I
> will look into later this week.
>
> Thanks
> Edgar
>
> On 4/29/2014 7:03 AM, Christoph Niethammer wrote:
>> Hello,
>>
>> It seems for me that the endianness is wrong in Open MPI's I/O for the external32 data representation. :O
>>
>> Find attached my test programs which write the integer -30 and the double 16.25 into a file.
>> Here the output on my Linux system:
>>
>> mpicc c-xdr.c -o c-xdr
>> mpicc mpi-io-external32.c -o mpi-io-external32
>> ./c-xdr
>> Output file: c-xdr.dat
>> hexdump c-xdr.dat
>> 0000000 ffff e2ff 3040 0040 0000 0000
>> 000000c
>> ./mpi-io-external32
>> Output file: mpi-io-external32.dat
>> hexdump mpi-io-external32.dat
>> 0000000 ffe2 ffff 0000 0000 4000 4030
>> 000000c
>>
>>
>> Best regards
>> Christoph Niethammer
>>
>> --
>>
>> Christoph Niethammer
>> High Performance Computing Center Stuttgart (HLRS)
>> Nobelstrasse 19
>> 70569 Stuttgart
>>
>> Tel: ++49(0)711-685-87203
>> email: niethammer_at_[hidden]
>> http://www.hlrs.de/people/niethammer
>>