Commit ca7f2390 authored by William Gropp's avatar William Gropp
Browse files

[svn-r10724] Correct implementation of MPI_COUNT, remove MPI_2COMPLEX and...

[svn-r10724] Correct implementation of MPI_COUNT, remove MPI_2COMPLEX and MPI_2DOUBLE_COMPLEX (invalid since MPI 1.1), and update generation of Fortran predefined MPI values
parent 238dafdc
...@@ -4260,10 +4260,23 @@ int main(int argc, char **argv ) ...@@ -4260,10 +4260,23 @@ int main(int argc, char **argv )
fi fi
# Get the size for the bsendoverhead # Get the size for the bsendoverhead
AC_CHECK_SIZEOF(MPIR_Bsend_data_t,128,[ AC_CHECK_SIZEOF(MPIR_Bsend_data_t,0,[
#define MPI_Datatype int #define MPI_Datatype int
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include "${master_top_srcdir}/src/include/mpibsend.h"] #include "${master_top_srcdir}/src/include/mpibsend.h"]
) )
if test "$ac_cv_sizeof_MPIR_Bsend_data_t" = "0" ; then
AC_MSG_ERROR([Unable to determine the size of MPI_BSEND_OVERHEAD"])
# In the past, a default of 128 was used (still likely good enough),
# but the autoconf SIZEOF macro has been changed to ignore the second
# argument, so code that depended on the prior defined behavior now
# silently breaks.
fi
BSEND_OVERHEAD=$ac_cv_sizeof_MPIR_Bsend_data_t BSEND_OVERHEAD=$ac_cv_sizeof_MPIR_Bsend_data_t
export BSEND_OVERHEAD export BSEND_OVERHEAD
AC_SUBST(BSEND_OVERHEAD) AC_SUBST(BSEND_OVERHEAD)
...@@ -5356,16 +5369,16 @@ subsystems="$devsubsystems $subsystems $bindingsubsystems" ...@@ -5356,16 +5369,16 @@ subsystems="$devsubsystems $subsystems $bindingsubsystems"
# Find the size of OPA_ptr_t. This step needs to come after the OPA # Find the size of OPA_ptr_t. This step needs to come after the OPA
# configure above in order to get the size OPA_ptr_t evaluated for # configure above in order to get the size OPA_ptr_t evaluated for
# this platform. # this platform.
AC_CHECK_SIZEOF(OPA_ptr_t,-1,[ AC_CHECK_SIZEOF(OPA_ptr_t,0,[
#include "${master_top_srcdir}/src/openpa/src/opa_primitives.h" #include "${master_top_srcdir}/src/openpa/src/opa_primitives.h"
pthread_mutex_t *OPA_emulation_lock; pthread_mutex_t *OPA_emulation_lock;
]) ])
if test "$enable_f77" != "yes" ; then if test "$enable_f77" != "yes" ; then
# These are Fortran datatypes ONLY. Set to null if no Fortran compiler. # These are Fortran datatypes ONLY. Set to null if no Fortran compiler.
# Removed the invalid 2COMPLEX and 2DOUBLE_COMPLEX
for name in CHARACTER INTEGER REAL LOGICAL COMPLEX DOUBLE_PRECISION \ for name in CHARACTER INTEGER REAL LOGICAL COMPLEX DOUBLE_PRECISION \
2INTEGER 2REAL DOUBLE_COMPLEX 2COMPLEX 2DOUBLE_PRECISION \ 2INTEGER 2REAL DOUBLE_COMPLEX 2DOUBLE_PRECISION ; do
2DOUBLE_COMPLEX ; do
fullname="MPI_$name" fullname="MPI_$name"
eval $fullname=MPI_DATATYPE_NULL eval $fullname=MPI_DATATYPE_NULL
done done
...@@ -5384,8 +5397,8 @@ AC_SUBST(MPI_2INTEGER) ...@@ -5384,8 +5397,8 @@ AC_SUBST(MPI_2INTEGER)
AC_SUBST(MPI_2REAL) AC_SUBST(MPI_2REAL)
AC_SUBST(MPI_DOUBLE_COMPLEX) AC_SUBST(MPI_DOUBLE_COMPLEX)
AC_SUBST(MPI_2DOUBLE_PRECISION) AC_SUBST(MPI_2DOUBLE_PRECISION)
AC_SUBST(MPI_2COMPLEX) dnl AC_SUBST(MPI_2COMPLEX)
AC_SUBST(MPI_2DOUBLE_COMPLEX) dnl AC_SUBST(MPI_2DOUBLE_COMPLEX)
AC_SUBST(MPI_FINT) AC_SUBST(MPI_FINT)
# If ROMIO was successfully configured, then ROMIO will have exported the # If ROMIO was successfully configured, then ROMIO will have exported the
...@@ -5535,7 +5548,7 @@ AC_SUBST([MPI_COUNT_DATATYPE]) ...@@ -5535,7 +5548,7 @@ AC_SUBST([MPI_COUNT_DATATYPE])
# 0x4c000045 is 1275068485 in decimal, add ($MPI_SIZEOF_COUNT * 256) and you get # 0x4c000045 is 1275068485 in decimal, add ($MPI_SIZEOF_COUNT * 256) and you get
# the decimal equivalent of the hex number # the decimal equivalent of the hex number
MPI_F77_COUNT=`expr 1275068484 '+' '(' 256 '*' $MPI_SIZEOF_OFFSET ')'` MPI_F77_COUNT=`expr 1275068485 '+' '(' 256 '*' $MPI_SIZEOF_OFFSET ')'`
AC_SUBST([MPI_F77_COUNT]) AC_SUBST([MPI_F77_COUNT])
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
......
...@@ -3746,16 +3746,21 @@ if ($write_mpif) { ...@@ -3746,16 +3746,21 @@ if ($write_mpif) {
foreach $key (IDENT,CONGRUENT,SIMILAR,UNEQUAL) { foreach $key (IDENT,CONGRUENT,SIMILAR,UNEQUAL) {
&print_mpif_int( "MPI_$key" ); &print_mpif_int( "MPI_$key" );
} }
# Window flavor and model
foreach $key (FLAVOR_CREATE,FLAVOR_ALLOCATE,FLAVOR_DYNAMIC,FLAVOR_SHARED,
SEPARATE, UNIFIED) {
&print_mpif_int( "MPI_WIN_$key" );
}
# Collective operations # Collective operations
foreach $key (MAX, MIN, SUM, PROD, LAND, BAND, LOR, BOR, LXOR, BXOR, MINLOC, MAXLOC, REPLACE ) { foreach $key (MAX, MIN, SUM, PROD, LAND, BAND, LOR, BOR, LXOR, BXOR, MINLOC, MAXLOC, REPLACE, NO_OP ) {
&print_mpif_int( "MPI_$key" ); &print_mpif_int( "MPI_$key" );
} }
# Objects # Objects
foreach $key ('COMM_WORLD', 'COMM_SELF', 'GROUP_EMPTY', 'COMM_NULL', 'WIN_NULL', 'FILE_NULL', 'GROUP_NULL', 'OP_NULL', 'DATATYPE_NULL', 'REQUEST_NULL', 'ERRHANDLER_NULL', 'INFO_NULL', ) { foreach $key ('COMM_WORLD', 'COMM_SELF', 'GROUP_EMPTY', 'COMM_NULL', 'WIN_NULL', 'FILE_NULL', 'GROUP_NULL', 'OP_NULL', 'DATATYPE_NULL', 'REQUEST_NULL', 'ERRHANDLER_NULL', 'INFO_NULL', 'INFO_ENV' ) {
&print_mpif_int( "MPI_$key" ); &print_mpif_int( "MPI_$key" );
} }
# Attributes # Attributes
foreach $key (TAG_UB, HOST, IO, WTIME_IS_GLOBAL, UNIVERSE_SIZE, LASTUSEDCODE, APPNUM, WIN_BASE, WIN_SIZE, WIN_DISP_UNIT ) { foreach $key (TAG_UB, HOST, IO, WTIME_IS_GLOBAL, UNIVERSE_SIZE, LASTUSEDCODE, APPNUM, WIN_BASE, WIN_SIZE, WIN_DISP_UNIT, WIN_CREATE_FLAVOR, WIN_MODEL ) {
# Special cast: The Fortran versions of these attributes have # Special cast: The Fortran versions of these attributes have
# value 1 greater than the C versions # value 1 greater than the C versions
$attrval = $mpidef{"MPI_$key"}; $attrval = $mpidef{"MPI_$key"};
...@@ -3768,7 +3773,7 @@ if ($write_mpif) { ...@@ -3768,7 +3773,7 @@ if ($write_mpif) {
&print_mpif_int( "MPI_$key" ); &print_mpif_int( "MPI_$key" );
} }
# String sizes # String sizes
# See MPI-2 2.6.2 and 4.12.9; the constants for string lenghts are # See MPI-2 2.6.2 and 4.12.9; the constants for string lengths are
# defined as one less than the C/C++ version # defined as one less than the C/C++ version
# Missing - max processor name! # Missing - max processor name!
...@@ -3805,10 +3810,14 @@ if ($write_mpif) { ...@@ -3805,10 +3810,14 @@ if ($write_mpif) {
# #
# Datatypes # Datatypes
# These are determined and set at configure time # These are determined and set at configure time
foreach $key (COMPLEX, DOUBLE_COMPLEX, LOGICAL, REAL, DOUBLE_PRECISION, INTEGER, '2INTEGER', '2COMPLEX', '2DOUBLE_PRECISION', '2REAL', '2DOUBLE_COMPLEX', CHARACTER) { foreach $key (COMPLEX, DOUBLE_COMPLEX, LOGICAL, REAL, DOUBLE_PRECISION, INTEGER, '2INTEGER', '2DOUBLE_PRECISION', '2REAL', CHARACTER) {
print MPIFFD " INTEGER MPI_$key\n"; print MPIFFD " INTEGER MPI_$key\n";
print MPIFFD " PARAMETER (MPI_$key=\@MPI_$key\@)\n"; print MPIFFD " PARAMETER (MPI_$key=\@MPI_$key\@)\n";
} }
# 2COMPLEX and 2DOUBLE_COMPLEX were defined in MPI 1 and removed in
# MPI 1.1. Don't define them for the Fortran interface.
#foreach $key ('2COMPLEX', '2DOUBLE_COMPLEX') {
#}
# Value of MPI_BYTE from top level configure! # Value of MPI_BYTE from top level configure!
$mpidef{"MPI_BYTE"} = hex "0x4c00010d"; $mpidef{"MPI_BYTE"} = hex "0x4c00010d";
foreach $key (BYTE, UB, LB, PACKED) { foreach $key (BYTE, UB, LB, PACKED) {
...@@ -4918,9 +4927,12 @@ sub ReadInterfaceForDefinitions { ...@@ -4918,9 +4927,12 @@ sub ReadInterfaceForDefinitions {
# Eat until we find the closing right brace # Eat until we find the closing right brace
$enum_line = $1; $enum_line = $1;
while (! ($enum_line =~ /}/)) { while (! ($enum_line =~ /}/)) {
$enum_line .= <MPIFD>; my $newline = <MPIFD>;
$newline =~ s/\r*\n//;
$enum_line .= $newline;
$linecount++; $linecount++;
} }
print "Handling enum $enum_line...\n" if $debug;
# Now process for names and values # Now process for names and values
while (($enum_line =~ /\s*(MPI[X]*_[A-Z_0-9]*)\s*=\s*([a-fx0-9]*)(.*)/)) { while (($enum_line =~ /\s*(MPI[X]*_[A-Z_0-9]*)\s*=\s*([a-fx0-9]*)(.*)/)) {
$mpidef{$1} = $2; $mpidef{$1} = $2;
......
...@@ -111,6 +111,7 @@ static mpi_names_t mpi_names[] = { ...@@ -111,6 +111,7 @@ static mpi_names_t mpi_names[] = {
/* address/offset types */ /* address/offset types */
type_name_entry(MPI_AINT), type_name_entry(MPI_AINT),
type_name_entry(MPI_OFFSET), type_name_entry(MPI_OFFSET),
type_name_entry(MPI_COUNT),
{ 0, (char *) 0 }, /* Sentinel used to indicate the last element */ { 0, (char *) 0 }, /* Sentinel used to indicate the last element */
}; };
......
...@@ -73,9 +73,10 @@ static MPI_Datatype mpi_dtypes[] = { ...@@ -73,9 +73,10 @@ static MPI_Datatype mpi_dtypes[] = {
MPI_C_DOUBLE_COMPLEX, MPI_C_DOUBLE_COMPLEX,
MPI_C_LONG_DOUBLE_COMPLEX, MPI_C_LONG_DOUBLE_COMPLEX,
/* address/offset types */ /* address/offset/count types */
MPI_AINT, MPI_AINT,
MPI_OFFSET, MPI_OFFSET,
MPI_COUNT,
/* Fortran types */ /* Fortran types */
MPI_COMPLEX, MPI_COMPLEX,
...@@ -219,7 +220,6 @@ int MPIR_Datatype_builtin_fillin(void) ...@@ -219,7 +220,6 @@ int MPIR_Datatype_builtin_fillin(void)
MPID_Datatype *dptr; MPID_Datatype *dptr;
MPI_Datatype d = MPI_DATATYPE_NULL; MPI_Datatype d = MPI_DATATYPE_NULL;
static int is_init = 0; static int is_init = 0;
char error_msg[1024];
/* FIXME: This is actually an error, since this routine /* FIXME: This is actually an error, since this routine
should only be called once */ should only be called once */
...@@ -246,14 +246,11 @@ int MPIR_Datatype_builtin_fillin(void) ...@@ -246,14 +246,11 @@ int MPIR_Datatype_builtin_fillin(void)
if (dptr < MPID_Datatype_builtin || if (dptr < MPID_Datatype_builtin ||
dptr > MPID_Datatype_builtin + MPID_DATATYPE_N_BUILTIN) dptr > MPID_Datatype_builtin + MPID_DATATYPE_N_BUILTIN)
{ {
MPIU_Snprintf(error_msg, 1024,
"%dth builtin datatype handle references invalid memory",
i);
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, mpi_errno = MPIR_Err_create_code(MPI_SUCCESS,
MPIR_ERR_FATAL, FCNAME, MPIR_ERR_FATAL, FCNAME,
__LINE__, MPI_ERR_INTERN, __LINE__, MPI_ERR_INTERN,
"**fail", "**fail %s", "**typeinitbadmem", "**typeinitbadmem %d",
error_msg); i);
return mpi_errno; return mpi_errno;
} }
/* --END ERROR HANDLING-- */ /* --END ERROR HANDLING-- */
...@@ -274,16 +271,11 @@ int MPIR_Datatype_builtin_fillin(void) ...@@ -274,16 +271,11 @@ int MPIR_Datatype_builtin_fillin(void)
/* --BEGIN ERROR HANDLING-- */ /* --BEGIN ERROR HANDLING-- */
if (d != -1 && i < sizeof(mpi_dtypes)/sizeof(*mpi_dtypes) && mpi_dtypes[i] != -1) { if (d != -1 && i < sizeof(mpi_dtypes)/sizeof(*mpi_dtypes) && mpi_dtypes[i] != -1) {
/* We did not hit the end-of-list */ /* We did not hit the end-of-list */
/*MPIU_Internal_error_printf( "Did not initialize all of the predefined datatypes (only did first %d)\n", i-1 );*/ mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
MPIU_Snprintf(error_msg, 1024, FCNAME, __LINE__,
"Did not initialize all of the predefined datatypes (only did first %d)\n", MPI_ERR_INTERN, "**typeinitfail",
i-1); "**typeinitfail %d", i-1);
return mpi_errno;
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
FCNAME, __LINE__,
MPI_ERR_INTERN, "**fail",
"**fail %s", error_msg);
return mpi_errno;
} }
/* --END ERROR HANDLING-- */ /* --END ERROR HANDLING-- */
is_init = 1; is_init = 1;
......
...@@ -427,7 +427,9 @@ extern MPIU_Object_alloc_t MPID_Datatype_mem; ...@@ -427,7 +427,9 @@ extern MPIU_Object_alloc_t MPID_Datatype_mem;
* here. */ * here. */
/* FIXME calculating this value this way is foolish, we should make this more /* FIXME calculating this value this way is foolish, we should make this more
* automatic and less error prone */ * automatic and less error prone */
#define MPID_DATATYPE_N_BUILTIN 68 /* FIXME: Given that this is relatively static, an adequate alternative is
to provide a check that this value is valid. */
#define MPID_DATATYPE_N_BUILTIN 69
extern MPID_Datatype MPID_Datatype_builtin[MPID_DATATYPE_N_BUILTIN + 1]; extern MPID_Datatype MPID_Datatype_builtin[MPID_DATATYPE_N_BUILTIN + 1];
extern MPID_Datatype MPID_Datatype_direct[]; extern MPID_Datatype MPID_Datatype_direct[];
......
...@@ -114,12 +114,12 @@ static mpi_names_t mpi_names[] = { ...@@ -114,12 +114,12 @@ static mpi_names_t mpi_names[] = {
#if MTEST_HAVE_MIN_MPI_VERSION(2,2) #if MTEST_HAVE_MIN_MPI_VERSION(2,2)
/* added in MPI-2.2 */ /* added in MPI-2.2 */
{ MPI_C_LONG_DOUBLE_COMPLEX, "MPI_C_LONG_DOUBLE_COMPLEX" }, { MPI_C_LONG_DOUBLE_COMPLEX, "MPI_C_LONG_DOUBLE_COMPLEX" },
{ MPI_AINT, "MPI_AINT" },
{ MPI_OFFSET, "MPI_OFFSET" },
#endif #endif
#if MTEST_HAVE_MIN_MPI_VERSION(3,0) #if MTEST_HAVE_MIN_MPI_VERSION(3,0)
/* added in MPI 3 */ /* added in MPI 3 */
{ MPI_COUNT, "MPI_COUNT" }, { MPI_COUNT, "MPI_COUNT" },
{ MPI_AINT, "MPI_AINT" },
{ MPI_OFFSET, "MPI_OFFSET" },
#endif #endif
{ 0, (char *)0 }, /* Sentinal used to indicate the last element */ { 0, (char *)0 }, /* Sentinal used to indicate the last element */
}; };
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment