[petsc-users] misleading "mpich" messages

Satish Balay balay at mcs.anl.gov
Tue Apr 25 16:57:50 CDT 2017


You can try the attached [untested] patch. It replicates the
MPICH_NUMVERSION code and replaces it with MVAPICH2_NUMVERSION

Satish

On Tue, 25 Apr 2017, Kong, Fande wrote:

> On Tue, Apr 25, 2017 at 3:42 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> >
> >    The error message is generated based on the macro MPICH_NUMVERSION
> > contained in the mpi.h file.
> >
> > Apparently MVAPICH also provides this macro, hence PETSc has no way to
> > know that it is not MPICH.
> >
> > If you can locate in the MVAPICH mpi.h include files macros related
> > explicitly to MVAPICH then we could possibly use that macro to provide a
> > more specific error message.
> >
> 
> 
> There is also a macro: MVAPICH2_NUMVERSION in mpi.h. We might use it to
> have a right message.
> 
> Looks possible for me.
> 
> Fande,
> 
> 
> 
> >
> >   Barry
> >
> >
> > > On Apr 25, 2017, at 4:35 PM, Kong, Fande <fande.kong at inl.gov> wrote:
> > >
> > > Hi,
> > >
> > > We configured PETSc with a version of MVAPICH, and complied with another
> > version of MVAPICH.  Got the error messages:
> > >
> > > error "PETSc was configured with one MPICH mpi.h version but now appears
> > to be compiling using a different MPICH mpi.h version"
> > >
> > >
> > > Why we could not say something about "MVAPICH" (not "MPICH")?
> > >
> > > Do we just simply consider all MPI implementations (MVAPICH, maybe Intel
> > MPI, IBM mpi?) based on MPICH as "MPICH"?
> > >
> > > Fande,
> >
> >
> 
-------------- next part --------------
diff --git a/config/BuildSystem/config/packages/MPI.py b/config/BuildSystem/config/packages/MPI.py
index f016a019eb..daed0d3f69 100644
--- a/config/BuildSystem/config/packages/MPI.py
+++ b/config/BuildSystem/config/packages/MPI.py
@@ -425,14 +425,22 @@ class Configure(config.package.Package):
     return
 
   def checkMPICHorOpenMPI(self):
-    '''Determine if MPICH_NUMVERSION or OMPI_MAJOR_VERSION exist in mpi.h
+    '''Determine if MVAPICH2_NUMVERSION, MPICH_NUMVERSION or OMPI_MAJOR_VERSION exist in mpi.h
        Used for consistency checking of MPI installation at compile time'''
     import re
+    mvapich2_test = '#include <mpi.h>\nint mpich_ver = MVAPICH2_NUMVERSION;\n'
     mpich_test = '#include <mpi.h>\nint mpich_ver = MPICH_NUMVERSION;\n'
     openmpi_test = '#include <mpi.h>\nint ompi_major = OMPI_MAJOR_VERSION;\nint ompi_minor = OMPI_MINOR_VERSION;\nint ompi_release = OMPI_RELEASE_VERSION;\n'
     oldFlags = self.compilers.CPPFLAGS
     self.compilers.CPPFLAGS += ' '+self.headers.toString(self.include)
-    if self.checkCompile(mpich_test):
+    if self.checkCompile(mvapich2_test):
+      buf = self.outputPreprocess(mvapich2_test)
+      try:
+        mvapich2_numversion = re.compile('\nint mvapich2_ver = *([0-9]*) *;').search(buf).group(1)
+        self.addDefine('HAVE_MVAPICH2_NUMVERSION',mvapich2_numversion)
+      except:
+        self.logPrint('Unable to parse MVAPICH2 version from header. Probably a buggy preprocessor')
+    elif self.checkCompile(mpich_test):
       buf = self.outputPreprocess(mpich_test)
       try:
         mpich_numversion = re.compile('\nint mpich_ver = *([0-9]*) *;').search(buf).group(1)
diff --git a/include/petscsys.h b/include/petscsys.h
index 1ece229001..4a9446fdd4 100644
--- a/include/petscsys.h
+++ b/include/petscsys.h
@@ -139,8 +139,14 @@ void assert_never_put_petsc_headers_inside_an_extern_c(int); void assert_never_p
 #  if !defined(__MPIUNI_H)
 #    error "PETSc was configured with --with-mpi=0 but now appears to be compiling using a different mpi.h"
 #  endif
+#elif defined(PETSC_HAVE_MVAPICH2_NUMVERSION)
+#  if !defined(MVAPICH2_NUMVERSION)
+#    error "PETSc was configured with MVAPICH2 but now appears to be compiling using a non-MVAPICH2 mpi.h"
+#  elif MVAPICH2_NUMVERSION != PETSC_HAVE_MVAPICH2_NUMVERSION
+#    error "PETSc was configured with one MVAPICH2 mpi.h version but now appears to be compiling using a different MVAPICH2 mpi.h version"
+#  endif
 #elif defined(PETSC_HAVE_MPICH_NUMVERSION)
-#  if !defined(MPICH_NUMVERSION)
+#  if !defined(MPICH_NUMVERSION) || defined(MVAPICH2_NUMVERSION)
 #    error "PETSc was configured with MPICH but now appears to be compiling using a non-MPICH mpi.h"
 #  elif MPICH_NUMVERSION != PETSC_HAVE_MPICH_NUMVERSION
 #    error "PETSc was configured with one MPICH mpi.h version but now appears to be compiling using a different MPICH mpi.h version"


More information about the petsc-users mailing list