The current and the previous versions of OpenMPI define MPI_LONG_LONG_INT and MPI_LONG_LONG constants as the address of two distinct global variables (&ompi_mpi_long_long_int and &ompi_mpi_long_long respectively) which makes the following expression true: MPI_LONG_LONG_INT != MPI_LONG_LONG.
After consulting the MPI standards, I noticed the following:
- The optional datatype corresponding to the optional C/C++ "long long" type is MPI_LONG_LONG_INT according to article 3.2.2. "Message data" of the MPI 1.1 standard (www.mpi-forum.org/docs/mpi-11-html/node32.html) and article 10.2. "Defined Constants for C and Fortran" (www.mpi-forum.org/docs/mpi-11-html/node169.html) of the MPI 1.1 standard.
- The MPI_LONG_LONG optional datatype appeared for the first time in section 9.5.2. "External Data Representation: ``external32''" of the MPI 2.0 standard (www.mpi-forum.org/docs/mpi-20-html/node200.htm). This paragraph state that with the external32 data representation, this datatype is eight (8) bytes long.
- However the previous statement was recognized as an error in the MPI 2.0 errata document (www.mpi-forum.org/docs/errata-20-2.html). The MPI 2.0 document should have used MPI_LONG_LONG_INT instead of MPI_LONG_LONG. It also state the following:
In addition, the type MPI_LONG_LONG should be added as an optional type; it is a synonym for MPI_LONG_LONG_INT.
This means that the real optional datatype corresponding to the C/C++ "long long" datatype is MPI_LONG_LONG_INT and that since MPI_LONG_LONG was mentioned by mistake in the MPI 2.0 standard document, the MPI_LONG_LONG predefined datatype constant is also accepted as a synonym to MPI_LONG_LONG_INT.
We should therefore have MPI_LONG_LONG_INT == MPI_LONG_LONG which is not the case in OpenMPI.
So please have a look at this issue.
Note that MPICH and MPICH2 implementations satisfy: MPI_LONG_LONG_INT == MPI_LONG_LONG.
Martin Audet E: martin DOT audet AT imi cnrc-nrc gc ca
Research Officer T: 450-641-5034
Industrial Material Institute / National Research Council
75 de Mortagne, Boucherville, QC, J4B 6Y4, Canada