[mpich-commits] r10724 - in mpich2/trunk: . src/binding/f77 src/mpi/datatype src/mpid/common/datatype test/mpi/datatype

gropp at mcs.anl.gov gropp at mcs.anl.gov
Fri Dec 7 16:14:09 CST 2012


Author: gropp
Date: 2012-12-07 16:14:08 -0600 (Fri, 07 Dec 2012)
New Revision: 10724

Modified:
   mpich2/trunk/configure.ac
   mpich2/trunk/src/binding/f77/buildiface
   mpich2/trunk/src/mpi/datatype/type_get_name.c
   mpich2/trunk/src/mpi/datatype/typeutil.c
   mpich2/trunk/src/mpid/common/datatype/mpid_datatype.h
   mpich2/trunk/test/mpi/datatype/typename.c
Log:
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

Modified: mpich2/trunk/configure.ac
===================================================================
--- mpich2/trunk/configure.ac	2012-12-07 22:13:22 UTC (rev 10723)
+++ mpich2/trunk/configure.ac	2012-12-07 22:14:08 UTC (rev 10724)
@@ -4260,10 +4260,23 @@
 fi
 
 # 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
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
 #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
 export BSEND_OVERHEAD
 AC_SUBST(BSEND_OVERHEAD)
@@ -5356,16 +5369,16 @@
 # 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
 # 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"
 pthread_mutex_t *OPA_emulation_lock;
 ])
 
 if test "$enable_f77" != "yes" ; then
     # 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 \
-	2INTEGER 2REAL DOUBLE_COMPLEX 2COMPLEX 2DOUBLE_PRECISION \
-	2DOUBLE_COMPLEX ; do
+	2INTEGER 2REAL DOUBLE_COMPLEX 2DOUBLE_PRECISION ; do
 	fullname="MPI_$name"
 	eval $fullname=MPI_DATATYPE_NULL
     done
@@ -5384,8 +5397,8 @@
 AC_SUBST(MPI_2REAL)
 AC_SUBST(MPI_DOUBLE_COMPLEX)
 AC_SUBST(MPI_2DOUBLE_PRECISION)
-AC_SUBST(MPI_2COMPLEX)
-AC_SUBST(MPI_2DOUBLE_COMPLEX)
+dnl AC_SUBST(MPI_2COMPLEX)
+dnl AC_SUBST(MPI_2DOUBLE_COMPLEX)
 AC_SUBST(MPI_FINT)
 
 # If ROMIO was successfully configured, then ROMIO will have exported the
@@ -5535,7 +5548,7 @@
 
 # 0x4c000045 is 1275068485 in decimal, add ($MPI_SIZEOF_COUNT * 256) and you get
 # 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])
 
 # ----------------------------------------------------------------------------

Modified: mpich2/trunk/src/binding/f77/buildiface
===================================================================
--- mpich2/trunk/src/binding/f77/buildiface	2012-12-07 22:13:22 UTC (rev 10723)
+++ mpich2/trunk/src/binding/f77/buildiface	2012-12-07 22:14:08 UTC (rev 10724)
@@ -3746,16 +3746,21 @@
     foreach $key (IDENT,CONGRUENT,SIMILAR,UNEQUAL) {
 	&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
-    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" );
     }
     # 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" );
     }
     # 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 
 	# value 1 greater than the C versions
 	$attrval = $mpidef{"MPI_$key"};
@@ -3768,7 +3773,7 @@
 	&print_mpif_int( "MPI_$key" );
     } 
     # 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
 
     # Missing - max processor name!
@@ -3805,10 +3810,14 @@
     #
     # Datatypes
     # 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 "       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!
     $mpidef{"MPI_BYTE"} = hex "0x4c00010d";
     foreach $key (BYTE, UB, LB, PACKED) {
@@ -4918,9 +4927,12 @@
 	    # Eat until we find the closing right brace
 	    $enum_line = $1;
 	    while (! ($enum_line =~ /}/)) { 
-	        $enum_line .= <MPIFD>; 
+	        my $newline = <MPIFD>;
+	        $newline =~ s/\r*\n//;
+	        $enum_line .= $newline;
                 $linecount++;
             }
+	    print "Handling enum $enum_line...\n" if $debug;
 	    # Now process for names and values
 	    while (($enum_line =~ /\s*(MPI[X]*_[A-Z_0-9]*)\s*=\s*([a-fx0-9]*)(.*)/)) {
 		$mpidef{$1} = $2;

Modified: mpich2/trunk/src/mpi/datatype/type_get_name.c
===================================================================
--- mpich2/trunk/src/mpi/datatype/type_get_name.c	2012-12-07 22:13:22 UTC (rev 10723)
+++ mpich2/trunk/src/mpi/datatype/type_get_name.c	2012-12-07 22:14:08 UTC (rev 10724)
@@ -111,6 +111,7 @@
     /* address/offset types */
     type_name_entry(MPI_AINT),
     type_name_entry(MPI_OFFSET),
+    type_name_entry(MPI_COUNT),
 
     { 0, (char *) 0 },  /* Sentinel used to indicate the last element */
 };

Modified: mpich2/trunk/src/mpi/datatype/typeutil.c
===================================================================
--- mpich2/trunk/src/mpi/datatype/typeutil.c	2012-12-07 22:13:22 UTC (rev 10723)
+++ mpich2/trunk/src/mpi/datatype/typeutil.c	2012-12-07 22:14:08 UTC (rev 10724)
@@ -73,9 +73,10 @@
     MPI_C_DOUBLE_COMPLEX,
     MPI_C_LONG_DOUBLE_COMPLEX,
 
-    /* address/offset types */
+    /* address/offset/count types */
     MPI_AINT,
     MPI_OFFSET,
+    MPI_COUNT,
 
     /* Fortran types */
     MPI_COMPLEX,
@@ -219,7 +220,6 @@
     MPID_Datatype *dptr;
     MPI_Datatype  d = MPI_DATATYPE_NULL;
     static int is_init = 0;
-    char error_msg[1024];
 
     /* FIXME: This is actually an error, since this routine 
        should only be called once */
@@ -246,14 +246,11 @@
 	    if (dptr < MPID_Datatype_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,
 						     MPIR_ERR_FATAL, FCNAME,
 						     __LINE__, MPI_ERR_INTERN,
-						     "**fail", "**fail %s",
-						     error_msg);
+						     "**typeinitbadmem", "**typeinitbadmem %d",
+						     i);
 		    return mpi_errno;
 		}
 	    /* --END ERROR HANDLING-- */
@@ -274,16 +271,11 @@
 	/* --BEGIN ERROR HANDLING-- */
  	if (d != -1 && i < sizeof(mpi_dtypes)/sizeof(*mpi_dtypes) && mpi_dtypes[i] != -1) { 
 	    /* 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 );*/
-	    MPIU_Snprintf(error_msg, 1024,
-			  "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,
-						 FCNAME, __LINE__,
-						 MPI_ERR_INTERN, "**fail",
-						 "**fail %s", error_msg);
-		return mpi_errno;
+            mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL,
+                                             FCNAME, __LINE__,
+                                             MPI_ERR_INTERN, "**typeinitfail",
+                                             "**typeinitfail %d", i-1);
+            return mpi_errno;
 	}
 	/* --END ERROR HANDLING-- */
 	is_init = 1;

Modified: mpich2/trunk/src/mpid/common/datatype/mpid_datatype.h
===================================================================
--- mpich2/trunk/src/mpid/common/datatype/mpid_datatype.h	2012-12-07 22:13:22 UTC (rev 10723)
+++ mpich2/trunk/src/mpid/common/datatype/mpid_datatype.h	2012-12-07 22:14:08 UTC (rev 10724)
@@ -427,7 +427,9 @@
  * here. */
 /* FIXME calculating this value this way is foolish, we should make this more
  * 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_direct[];
 

Modified: mpich2/trunk/test/mpi/datatype/typename.c
===================================================================
--- mpich2/trunk/test/mpi/datatype/typename.c	2012-12-07 22:13:22 UTC (rev 10723)
+++ mpich2/trunk/test/mpi/datatype/typename.c	2012-12-07 22:14:08 UTC (rev 10724)
@@ -114,12 +114,12 @@
 #if MTEST_HAVE_MIN_MPI_VERSION(2,2)
     /* added in MPI-2.2 */
     { MPI_C_LONG_DOUBLE_COMPLEX, "MPI_C_LONG_DOUBLE_COMPLEX" },
+    { MPI_AINT,  "MPI_AINT"  },
+    { MPI_OFFSET, "MPI_OFFSET" },
 #endif
 #if MTEST_HAVE_MIN_MPI_VERSION(3,0)
     /* added in MPI 3 */
     { MPI_COUNT, "MPI_COUNT" },
-    { MPI_AINT,  "MPI_AINT"  },
-    { MPI_OFFSET, "MPI_OFFSET" },
 #endif
     { 0, (char *)0 },  /* Sentinal used to indicate the last element */
 };



More information about the commits mailing list