Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] 1.4.4rc2 is up
From: Larry Baker (baker_at_[hidden])
Date: 2011-05-23 14:43:40


Jeff,

I get the following warning from "make" using the Intel 2011.3.174
compilers on OpenMPI 1.4.3:

> libtool: compile: icc -DHAVE_CONFIG_H -I. -I../../opal/include -
> I../../orte/include -I../../ompi/include -I../../opal/mca/paffinity/
> linux/plpa/src/libplpa -I../.. -DNDEBUG -g -O3 -finline-functions -
> fno-strict-aliasing -restrict -pthread -fvisibility=hidden -MT
> dt_module.lo -MD -MP -MF .deps/dt_module.Tpo -c dt_module.c -fPIC -
> DPIC -o .libs/dt_module.o
> dt_module.c(709): warning #1224: #warning directive: "No proper C
> type found for COMPLEX32"
> # warning "No proper C type found for COMPLEX32"
> ^

The code in ompi/datatype/dt_module.c (lines 705-713; exactly the same
in 1.4.4rc2) is:

> #if OMPI_HAVE_FORTRAN_COMPLEX32
> #if OMPI_REAL16_MATCHES_C && (OMPI_SIZEOF_FORTRAN_COMPLEX32 ==
> 2*SIZEOF_LONG_DOUBLE)
> DECLARE_MPI_SYNONYM_DDT( &ompi_mpi_complex32.dt,
> "MPI_COMPLEX32", &ompi_mpi_ldblcplex.dt );
> #else
> # warning "No proper C type found for COMPLEX32"
> DECLARE_MPI_SYNONYM_DDT( &ompi_mpi_complex32.dt,
> "MPI_COMPLEX32", &ompi_mpi_unavailable.dt );
> #endif
> ompi_mpi_complex32.dt.flags |= DT_FLAG_DATA_FORTRAN |
> DT_FLAG_DATA_COMPLEX;
> #endif /* OMPI_HAVE_FORTRAN_COMPLEX32 */

I see from configure, that the Intel compilers support REAL*16 and
COMPLEX*32, but the representations are different between the C and
Fortran compilers:

> checking if REAL*16 matches bit representation of long double... no
> configure: WARNING: MPI_REAL16 and MPI_COMPLEX32 support have been
> disabled

I have two observations:

1) Despite the message saying so, configure does not in fact disable
MPI_REAL16 and MPI_COMPLEX32 support; the code in ompi/datatype/
dt_module.c happens to catch the error. From opal/include/
opal_config.h:

> #define OMPI_ALIGNMENT_FORTRAN_COMPLEX32 1

> #define OMPI_ALIGNMENT_FORTRAN_REAL16 1
> #define OMPI_HAVE_F90_COMPLEX32 1
> #define OMPI_HAVE_F90_REAL16 1
> #define OMPI_HAVE_FORTRAN_COMPLEX32 1
> #define OMPI_HAVE_FORTRAN_REAL16 1
> #define OMPI_REAL16_MATCHES_C 0
> #define OMPI_SIZEOF_FORTRAN_COMPLEX32 32
> #define OMPI_SIZEOF_FORTRAN_REAL16 16

2) ompi/datatype/dt_module.c does not catch the same error for the
incompatible REAL*16 datatype (lines 609-617):

> #if OMPI_HAVE_FORTRAN_REAL16
> #if (OMPI_SIZEOF_FORTRAN_REAL16 == SIZEOF_LONG_DOUBLE) <-- should be
> #if OMPI_REAL16_MATCHES_C && (OMPI_SIZEOF_FORTRAN_REAL16 ==
> SIZEOF_LONG_DOUBLE)
> DECLARE_MPI_SYNONYM_DDT( &ompi_mpi_real16.dt, "MPI_REAL16",
> &ompi_mpi_long_double.dt );
> #else
> # warning "No proper C type found for REAL16"
> DECLARE_MPI_SYNONYM_DDT( &ompi_mpi_real16.dt, "MPI_REAL16",
> &ompi_mpi_unavailable.dt );
> #endif
> ompi_mpi_real16.dt.flags |= DT_FLAG_DATA_FORTRAN |
> DT_FLAG_DATA_FLOAT;
> #endif /* OMPI_HAVE_FORTRAN_REAL16 */

I do not like make warnings. configure determines that the REAL*16
and COMPLEX*32 datatypes are incompatible, but then does not actually
disable them, despite saying it did. I like defensive code. The
COMPLEX*32 datatype protection needs to be applied to the REAL*16
datatype as well in ompi/datatype/dt_module.c.

Larry Baker
US Geological Survey
650-329-5608
baker_at_[hidden]

On 5 May 2011, at 7:15 AM, Jeff Squyres wrote:

> Fixed the ROMIO attribute problem properly this time -- it's in the
> usual place:
>
> http://www.open-mpi.org/software/ompi/v1.4/
>
> --
> Jeff Squyres
> jsquyres_at_[hidden]
> For corporate legal information go to:
> http://www.cisco.com/web/about/doing_business/legal/cri/
>
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel