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

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


_______________________________________________
devel mailing list
devel@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel