Hi, I get the following build failure when trying to compile 3.1 via an mpif90 compiler wrapper to gfortran 4.9.2.
/usr/projects/hpcsoft/toss2/moonlight/openmpi/1.6.5-gcc-4.9/bin/mpif90 -DBUILD_ROBUST -DGNU -DUSE_MPI -g -O0 -fbounds-check -fopenmp -J../mod -I/usr/projects/hpcsoft/toss2.2/moonlight/openmpi/1.6.5-gcc-4.9/include/openmpi/opal/mca/hwloc/hwloc132/hwloc/include -I/usr/projects/hpcsoft/toss2.2/moonlight/openmpi/1.6.5-gcc-4.9/include -I/usr/projects/hpcsoft/toss2.2/moonlight/openmpi/1.6.5-gcc-4.9/include/openmpi -I/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/mod -I/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source -c /usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90 -o CMakeFiles/pfunit.dir/AssertArraysInternalassertEqual.F90.o
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2100.50:
real(kind=r32), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2133.50:
real(kind=r64), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2672.53:
complex(kind=r32), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2705.53:
complex(kind=r64), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3244.53:
integer(kind=i32), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3277.53:
integer(kind=i64), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3478.51:
real(kind=r32), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3489.51:
real(kind=r64), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3676.54:
complex(kind=c32), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3687.54:
complex(kind=c64), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3874.54:
integer(kind=i32), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3885.54:
integer(kind=i64), intent(in) :: x(:,:,:,:,:,:,:,:)
1
Error: Array specification at (1) has more than 7 dimensions
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3674.52:
logical function isWithinTolerance_8D_complex32(x, tolerance, norm)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3685.52:
logical function isWithinTolerance_8D_complex64(x, tolerance, norm)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3872.52:
logical function isWithinTolerance_8D_integer32(x, tolerance, norm)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3883.52:
logical function isWithinTolerance_8D_integer64(x, tolerance, norm)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3476.49:
logical function isWithinTolerance_8D_real32(x, tolerance, norm)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3487.49:
logical function isWithinTolerance_8D_real64(x, tolerance, norm)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2671.36:
function vectorNorm_8D_complex32(x, norm) result(y)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2704.36:
function vectorNorm_8D_complex64(x, norm) result(y)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3243.36:
function vectorNorm_8D_integer32(x, norm) result(y)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:3276.36:
function vectorNorm_8D_integer64(x, norm) result(y)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2099.33:
function vectorNorm_8D_real32(x, norm) result(y)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:2132.33:
function vectorNorm_8D_real64(x, norm) result(y)
1
Error: Symbol 'x' at (1) has no IMPLICIT type
/usr/projects/eap/users/wohlbier/devel/EAP/src/Trunk/eap.rh/ML/Build_xrage/pFUnit/buildit/source/AssertArraysInternalassertEqual.F90:198.50:
module procedure isWithinTolerance_8D_integer64
1
Error: Ambiguous interfaces 'iswithintolerance_8d_integer64' and 'iswithintolerance_8d_integer32' in generic interface 'iswithintolerance' at (1)
Fatal Error: Error count reached limit of 25.
Thank you for the report and I'm sorry for the trouble. This is a surprising failure because the default maximum rank is 5.
Perhaps something in OpenMPI 1.6.5 is hijacking MAX_RANK or PFUNIT_MAX_RANK (the latter unlikely).
I've just successfully built and tested pFUnit 3.1 master on OS X 10.10.3 with MacPorts gcc49 4.9.2_1 and OpenMPI 1.8.2. I presume you're using the master branch, let me know if you're on another branch.
I recall having trouble building with a previous version of OpenMPI, perhaps even 1.6.x.
Might it be possible to upgrade OpenMPI in your environment? This would be my first choice.
Alternatively, maybe explicitly setting MAX_RANK would help. Both the GNU make and CMake builds look for the environment variable PFUNIT_MAX_RANK to set MAX_RANK, which is passed to source/GenerateAssertsOnArrays.py. There are also ways to set this variable via the command line.
Another couple of variables are the GNU Make and Python versions. I don't think those are a problem here.
Discussing this issue with Tom highlights that this build is configured for a maximum rank >= 8. Fortran-90/95/2003 allow a maximum rank of 7. Fortran 2008 allows up to 15, a feature that GNU Fortran does not currently support. So if you need arrays of rank 8 or more, you'll need to use a different compiler. Otherwise, we have an odd situation where MAX_RANK is somehow being captured during the build.
Mike Rilee
NASA Advanced Software Technology Group
301-286-3147
Indeed I was trying to do MAX_RANK=8. Sorry for not including that information. The reason I was doing this is that we have a machine that requires a power of 2 MPI ranks, so 5 was not working. I will see if I can get by with 4 instead.
It still seems like there might be a more subtle misunderstanding/issue here.
MPI “rank” is unrelated to Fortran “rank”. One can easily have an MPI NPES=2^16 (which would have a max MPI rank of 2^16-1), but this would not necessitate
arrays of any particular Fortran rank.
The only situation I can think of is that you have an array that is trying to replicate the 2^N structure of your MPI topology, and would therefore need an array of (Fortran) rank = N. You’d need to declare your arrays differently for each N, or use a different array depending on N, which sounds complicated. And you’d never be able to run large PE counts. N <= 7 for F2003 and N<=15 for F2008. I’m guessing that you are on an IBM Blue Gene, which can easily be much larger than that.
If you tell us a bit more about your requirements, we might be able to help.
Cheers,
On Apr 16, 2015, at 11:17 AM, John Wohlbier wohlbier@users.sf.net wrote:
Thomas Clune, Ph. D. Thomas.L.Clune@nasa.gov
Head ASTG,Code 606
NASA GSFC
MS 610.8 B33-C128
Greenbelt, MD 20771
301-286-4635
Related
Bugs:
#45Does the MAX_RANK build configuration option have anything to do with how many MPI ranks you run the tests with? I guess I assumed MAX_RANK was the maximum number of MPI ranks the tests could be run with. If that's not the case I will stop trying to set MAX_RANK at build time.
Good point. pFUnit's MAX_RANK deals with the number of array dimensions allowed in assertions and is not connected to MPI. We have an overloading of the notion of rank in Fortran vs. MPI. I don't believe pFUnit has a meaningful limit on the maximum MPI rank it supports.
We should make this clearer in the documentation.
I looked again at the documentation and it was my mistake. Though "PFUNIT_MAX_RANK" I think pretty naturally suggests to a new reader "maximum mpi ranks".
PFUNIT_MAX_RANK- controls the maximum size of the arrays asserts are defined over. If PFUNIT_MAX_RANK is not set, the default is 5 and pFUnit's assertions will be able to handle arrays up to rank 5.Hmmm. I’m happy to change the variable to PFUNIT_MAX_FORTRAN_RANK, but
there are backward compatibility issues. We can have both for now and
then deprecate the original in release 4.0.
Cheers,
On Apr 16, 2015, at 12:20 PM, John Wohlbier wohlbier@users.sf.net wrote:
Thomas Clune, Ph. D. Thomas.L.Clune@nasa.gov
Head ASTG,Code 606
NASA GSFC
MS 610.8 B33-C128
Greenbelt, MD 20771
301-286-4635
Related
Bugs:
#45Thanks for following up. It makes sense to clarify the point that rank there refers to the number of Fortran array dimensions.
Changed the documentation on the development branch to clarify that MAX_RANK deals with the number of Fortran array dimensions and is not connected to MPI's notion of rank. Added PFUNIT_MAX_ARRAY_RANK. Added removal of PFUNIT_MAX_RANK at version 4 as a feature request. Note that MAX_RANK is still used internally, which should not concern most users.