On Mon, 29 Dec 2008, Shi Jin wrote:

> Thank you very much.
> I did 
> 1. ./configure --CC=mpixlc --FC=mpixlf77 --with-batch 
> --download-f-blas-lapack=1
> =================================================================================
>     Since your compute nodes require use of a batch system or mpiexec you 
> must:
>  1) Submit ./conftest to 1 processor of your batch system or system you are   
>  
>     cross-compiling for; this will generate the file reconfigure.py           
>  
>  2) Run ./reconfigure.py (to complete the configure process).                 
>  
> =================================================================================
> 2.  mpirun -partition R001 -n 1 -mode vn  -cwd $PWD -exe $PWD/conftest
> But it exited with error during the run. I see the output file
> sjin at fen1 petsc-3.0.0-p0 $ cat reconfigure.py
> #!/usr/bin/python
> 
> configure_options = [
>  '--with-memcmp-ok',  '--sizeof_char=1',
>   '--sizeof_void_p=4',
>   '--sizeof_short=2',
>   '--sizeof_int=4',
>   '--sizeof_long=4',
>   '--sizeof_long_long=8',
>   '--sizeof_float=4',
>   '--sizeof_double=8',
>   '--sizeof_size_t=4',
>  '--bits_per_byte=8',
>   '--sizeof_MPI_Comm=4',
>   '--sizeof_MPI_Fint=4',
> sjin at fen1 petsc-3.0.0-p0 $
> 
> It is not complete and error must have happened after sizeof_MPI_Fint. The 
> good news is that the sizeof(char) error is no longer there once we do the 
> batch mode. I am wondering if there is a way to keep the conftest.c source 
> and relevant header files (I think they are created temporarily and deleted 
> after the built). This way, it would be fairly easy to figure out which part 
> is having problem. 


Yes- preserving conftest.c would be useful. Currently I've managed to
grab this code by introducing a compile bug into the generated code,
and then looking at configure.log [since the compile fails - configure
spits out the code into configure.log]

For eg: - the following change will do this..
asterix:/home/balay/tmp/petsc-3.0.0-p0>hg diff
diff -r 91983f07319f config/BuildSystem/config/packages/MPI.py
--- a/config/BuildSystem/config/packages/MPI.py Tue Dec 30 00:49:45 2008 -0600
+++ b/config/BuildSystem/config/packages/MPI.py Tue Dec 30 00:50:01 2008 -0600
@@ -233,7 +233,7 @@
           self.framework.addBatchBody('''
 {
   MPI_Aint size;
-  int ierr = MPI_Type_extent(%s, &size);
+  int ierr = MPI_Type_extent(%s, &size)
   if(!ierr && (size != 0)) {
     fprintf(output, "  \'--have-mpi-%s=1\',\\n");
   } else {
asterix:/home/balay/tmp/petsc-3.0.0-p0>


However it is likely the attached patch will fix this problem [it is
scheduled for the next patch update]

cd config/BuildSystem
patch -Np1 < mpi-check-cray.patch

Satish


> Please help.
> Thank you very much.
> --
> Shi Jin, PhD
> 
> 
> --- On Mon, 12/29/08, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> > From: Barry Smith <bsmith at mcs.anl.gov>
> > Subject: Re: Problem installing petsc on a Blue Gene/L
> > To: petsc-users at mcs.anl.gov
> > Date: Monday, December 29, 2008, 10:34 AM
> > Since the BlueGene is a batch system you need the additional
> > option --with-batch and follow
> > the directions.
> > 
> >    Barry
> > 
> > On Dec 29, 2008, at 4:34 AM, Shi Jin wrote:
> > 
> > > Hi there,
> > > 
> > > I have been trying to install petsc-3.0 on a Blue
> > Gene/L system.
> > > Here is what I used to configure:
> > > ./configure --CC=blrts_xlc
> > --CFLAGS="-I/bgl/BlueLight/ppcfloor/bglsys/include
> > -qtune=440 -qarch=440d -qlist -qsource  -O3   
> > -L/bgl/BlueLight/ppcfloor/bglsys/lib -lmpich.rts
> > -lmsglayer.rts -lrts.rts -ldevices.rts"
> > --with-mpi-compilers=0 --with-fortran=0
> > > 
> > > I got an error as following:
> > > TESTING: checkSizeof from
> > config.types(/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/types.py:251)
> > >
> > *********************************************************************************
> > >         UNABLE to CONFIGURE with GIVEN OPTIONS    (see
> > configure.log for details):
> > >
> > ---------------------------------------------------------------------------------------
> > > Unable to determine sizeof_char
> > >
> > *********************************************************************************
> > > 
> > > Here is the relevant configure.log part:
> > > TEST checkSizeof from
> > config.types(/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/types.py:251)
> > > TESTING: checkSizeof from
> > config.types(/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/types.py:251)
> > >  Determines the size of type "typeName", and
> > defines SIZEOF_"typeName" to be the size
> > > Checking for size of type: char
> > >          Pushing language C
> > > sh: blrts_xlc -c -o conftest.o
> > -I/bgl/BlueLight/ppcfloor/bglsys/include -qtune=440
> > -qarch=440d -qlist -qsource  -O3   
> > -L/bgl/BlueLight/ppcfloor/bglsys/lib -lmpich.rts
> > -lmsglayer.rts -lrts.rts -ldevices.rts -g  conftest.c
> > > Executing: blrts_xlc -c -o conftest.o
> > -I/bgl/BlueLight/ppcfloor/bglsys/include -qtune=440
> > -qarch=440d -qlist -qsource  -O3   
> > -L/bgl/BlueLight/ppcfloor/bglsys/lib -lmpich.rts
> > -lmsglayer.rts -lrts.rts -ldevices.rts -g  conftest.c
> > > sh:
> > >                      Pushing language C
> > >                      Popping language C
> > > sh: blrts_xlc  -o conftest  
> > -I/bgl/BlueLight/ppcfloor/bglsys/include -qtune=440
> > -qarch=440d -qlist -qsource  -O3   
> > -L/bgl/BlueLight/ppcfloor/bglsys/lib -lmpich.rts
> > -lmsglayer.rts -lrts.rts -ldevices.rts -g  conftest.o
> > > Executing: blrts_xlc  -o conftest  
> > -I/bgl/BlueLight/ppcfloor/bglsys/include -qtune=440
> > -qarch=440d -qlist -qsource  -O3   
> > -L/bgl/BlueLight/ppcfloor/bglsys/lib -lmpich.rts
> > -lmsglayer.rts -lrts.rts -ldevices.rts -g  conftest.o
> > > sh:
> > > Executing: ./conftest
> > > sh: ./conftest
> > > Executing: ./conftest
> > > sh:
> > > ERROR while running executable: Could not execute
> > './conftest':
> > >
> > *********************************************************************************
> > >         UNABLE to CONFIGURE with GIVEN OPTIONS    (see
> > configure.log for details):
> > >
> > ---------------------------------------------------------------------------------------
> > > Unable to determine sizeof_char
> > >
> > *********************************************************************************
> > >  File "./configure", line 217, in
> > petsc_configure
> > >    framework.configure(out = sys.stdout)
> > >  File
> > "/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/framework.py",
> > line 884, in configure
> > >    child.configure()
> > >  File
> > "/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/types.py",
> > line 353, in configure
> > >    map(lambda type: self.executeTest(self.checkSizeof,
> > type), ['char','void *', 'short',
> > 'int', 'long', 'long long',
> > 'float', 'double', 'size_t'])
> > >  File
> > "/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/types.py",
> > line 353, in <lambda>
> > >    map(lambda type: self.executeTest(self.checkSizeof,
> > type), ['char','void *', 'short',
> > 'int', 'long', 'long long',
> > 'float', 'double', 'size_t'])
> > >  File
> > "/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/base.py",
> > line 97, in executeTest
> > >    ret = apply(test, args,kargs)
> > >  File
> > "/gpfs/bglscratch/pi/sjin/src/petsc-3.0.0-p0/config/BuildSystem/config/types.py",
> > line 275, in checkSizeof
> > >    raise RuntimeError('Unable to determine
> > '+typename)
> > > 
> > > Do you know what could be my possible cause of the
> > error?
> > > I wrote a simple C test code and was able to show that
> > sizeof(char)=1. Is there a way to get the conftest.c code
> > and try it out manually?
> > > Thanks a lot.
> > > 
> > > --
> > > Shi Jin, PhD
> > > 
> > > 
> > > 
> > >
> 
> 
>       
> 
> 
-------------- next part --------------
tree 1573f683f67d
parent 0d13e9fc4001
author Matt Knepley <knepley at mcs.anl.gov> 1230131724 21600
committer Matt Knepley <knepley at mcs.anl.gov> 1230131724 21600
revision 2207
branch default

Disable testing code
diff --git a/config/packages/MPI.py b/config/packages/MPI.py
--- a/config/packages/MPI.py
+++ b/config/packages/MPI.py
@@ -218,7 +218,8 @@
     oldLibs  = self.compilers.LIBS
     self.compilers.CPPFLAGS += ' '+self.headers.toString(self.include)
     self.compilers.LIBS = self.libraries.toString(self.lib)+' 
'+self.compilers.LIBS
-    for datatype, name in [('MPI_LONG_DOUBLE', 'long-double'), 
('MPI_ENORMOUS_DOUBLE', 'enormous-double'), ('MPI_UNBELIEVABLE_DOUBLE', 
'unbelievable-double')]:
+    #for datatype, name in [('MPI_LONG_DOUBLE', 'long-double'), 
('MPI_ENORMOUS_DOUBLE', 'enormous-double'), ('MPI_UNBELIEVABLE_DOUBLE', 
'unbelievable-double')]:
+    for datatype, name in [('MPI_LONG_DOUBLE', 'long-double')]:
       if self.checkCompile('#ifdef PETSC_HAVE_STDLIB_H\n  #include 
<stdlib.h>\n#endif\n#include <mpi.h>\n', 'MPI_Aint size;\nint ierr = 
MPI_Type_extent('+datatype+', &size);\nif(ierr || (size == 0)) exit(1);\n'):
         if 'have-mpi-'+name in self.argDB:
           if int(self.argDB['have-mpi-'+name]):
tree e3bac313a1d7
parent 5c1db22fa3b5
author Matt Knepley <knepley at mcs.anl.gov> 1230134339 21600
committer Matt Knepley <knepley at mcs.anl.gov> 1230134339 21600
revision 2208
branch default

Added setup/cleanup section for batch executable and made main() take arguments
- Put in MPI_Init/Finalize() for batch run
diff --git a/config/framework.py b/config/framework.py
--- a/config/framework.py
+++ b/config/framework.py
@@ -83,8 +83,10 @@
     self.argDB['CPPFLAGS']  = ''
     if not 'LDFLAGS' in self.argDB:
       self.argDB['LDFLAGS'] = ''
+    self.batchSetup         = []
     self.batchIncludes      = []
     self.batchBodies        = []
+    self.batchCleanup       = []
     self.batchIncludeDirs   = []
     self.dependencies       = {}
     self.configureParent    = None
@@ -817,6 +819,13 @@
       self.externalPackagesDir = None
     return
 
+  def addBatchSetup(self, setup):
+    '''Add code to be run before batch tests execute'''
+    if not isinstance(setup, list):
+      setup = [setup]
+    self.batchSetup.extend(setup)
+    return
+
   def addBatchInclude(self, includes):
     '''Add an include or a list of includes to the batch run'''
     if not isinstance(includes, list):
@@ -831,6 +840,13 @@
     self.batchBodies.extend(statements)
     return
 
+  def addBatchCleanup(self, cleanup):
+    '''Add code to be run after batch tests execute'''
+    if not isinstance(cleanup, list):
+      cleanup = [cleanup]
+    self.batchCleanup.extend(cleanup)
+    return
+
   def configureBatch(self):
     '''F'''
     if self.batchBodies:
@@ -841,7 +857,9 @@
       body = ['FILE *output = fopen("reconfigure.py","w");']
       body.append('fprintf(output, "#!'+sys.executable+'\\n");')
       body.append('fprintf(output, "\\nconfigure_options = [\\n");')
+      body.extend(self.batchSetup)
       body.extend(self.batchBodies)
+      body.extend(self.batchCleanup)
       body.append('fprintf(output, "  '+repr(args)[1:-1]+'\\n]");')
       driver = ['fprintf(output, "\\nif __name__ == \'__main__\':',
                 '  import os',
@@ -856,7 +874,7 @@
       oldFlags = self.compilers.CPPFLAGS
       self.compilers.CPPFLAGS += ' '.join(self.batchIncludeDirs)
       self.batchIncludes.insert(0, '#include <stdio.h>\n#include 
<sys/types.h>\n#include <sys/stat.h>')
-      if not self.checkLink('\n'.join(self.batchIncludes)+'\n', 
'\n'.join(body), cleanup = 0):
+      if not self.checkLink('\n'.join(self.batchIncludes)+'\n', 
'\n'.join(body), cleanup = 0, codeBegin = '\nint main(int argc, char **argv) 
{\n'):
         sys.exit('Unable to generate test file for 
cross-compilers/batch-system\n')
       self.compilers.CPPFLAGS = oldFlags
       self.logClear()
diff --git a/config/packages/MPI.py b/config/packages/MPI.py
--- a/config/packages/MPI.py
+++ b/config/packages/MPI.py
@@ -46,6 +46,7 @@
     # local state
     self.commf2c          = 0
     self.commc2f          = 0
+    self.needBatchMPI     = 1
     return
 
   def setupHelp(self, help):
@@ -230,6 +231,10 @@
             self.addDefine('HAVE_'+datatype, 1)
           self.popLanguage()
         else:
+          if self.needBatchMPI:
+            self.framework.addBatchSetup('if (MPI_Init(&argc, &argv));')
+            self.framework.addBatchCleanup('if (MPI_Finalize());')
+            self.needBatchMPI = 0
           self.framework.addBatchInclude(['#include <stdlib.h>', '#include 
<mpi.h>'])
           self.framework.addBatchBody('''
 {
diff -r 97d5249b8bbd config/packages/MPI.py
--- a/config/packages/MPI.py    Wed Dec 24 09:58:59 2008 -0600
+++ b/config/packages/MPI.py    Sat Dec 27 09:00:46 2008 -0600
@@ -238,8 +238,11 @@
           self.framework.addBatchInclude(['#include <stdlib.h>', '#include 
<mpi.h>'])
           self.framework.addBatchBody('''
 {
-  MPI_Aint size;
-  int ierr = MPI_Type_extent(%s, &size);
+  MPI_Aint size=0;
+  int ierr=0;
+  if (MPI_LONG_DOUBLE != MPI_DATATYPE_NULL) {
+    ierr = MPI_Type_extent(%s, &size);
+  }
   if(!ierr && (size != 0)) {
     fprintf(output, "  \'--have-mpi-%s=1\',\\n");
   } else {

Reply via email to