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
ba...@usgs.gov
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
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
http://www.open-mpi.org/mailman/listinfo.cgi/devel