My problem with compiling MAGMA
Posted: Thu Apr 17, 2014 2:17 pm
I can get the compile to run as far as, and past, the ranlib step. Here is the output from there on.
ranlib ../lib/libmagma.a
make[1]: Leaving directory `/export/home1/scratch/magma-1.4.1/src'
======================================== control
( cd control && make )
make[1]: Entering directory `/export/home1/scratch/magma-1.4.1/control'
gcc -O3 -DADD_ -DMAGMA_SETAFFINITY -DHAVE_CUBLAS -DMIN_CUDA_ARCH=200 -I/usr/local/cuda/include -I../include -I../control -c zpanel_to_q.cpp -o zpanel_to_q.o
gcc -O3 -DADD_ -DMAGMA_SETAFFINITY -DHAVE_CUBLAS -DMIN_CUDA_ARCH=200 -I/usr/local/cuda/include -I../include -I../control -c zprint.cpp -o zprint.o
gcc -O3 -DADD_ -DMAGMA_SETAFFINITY -DHAVE_CUBLAS -DMIN_CUDA_ARCH=200 -I/usr/local/cuda/include -I../include -I../control -c magma_zf77pgi.cpp -o magma_zf77pgi.o
magma_zf77pgi.cpp: In function ‘void magma_zgebrd_(magma_int_t*, magma_int_t*, double2*, magma_int_t*, double*, double*, double2*, double2*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:77: error: cannot convert ‘double2*’ to ‘magma_int_t*’ for argument ‘11’ to ‘magma_int_t magma_zgebrd(magma_int_t, magma_int_t, magmaDoubleComplex*, magma_int_t, double*, double*, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*, magma_int_t, magma_int_t*)’
magma_zf77pgi.cpp: In function ‘void magma_zgehrd_(magma_int_t*, magma_int_t*, magma_int_t*, double2*, magma_int_t*, double2*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:80: error: invalid conversion from ‘magma_int_t*’ to ‘magma_int_t’
magma_zf77pgi.cpp:80: error: initializing argument 8 of ‘magma_int_t magma_zgehrd(magma_int_t, magma_int_t, magma_int_t, magmaDoubleComplex*, magma_int_t, magmaDoubleComplex*, magmaDoubleComplex*, magma_int_t, magmaDoubleComplex*, magma_int_t*)’
magma_zf77pgi.cpp: In function ‘void magma_zlabrd_(magma_int_t*, magma_int_t*, magma_int_t*, double2*, magma_int_t*, double*, double*, double2*, double2*, double2*, magma_int_t*, double2*, magma_int_t*, double2*, magma_int_t*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:95: error: ‘magma_zlabrd’ was not declared in this scope
magma_zf77pgi.cpp: In function ‘void magma_zlahru_(magma_int_t*, magma_int_t*, magma_int_t*, double2*, magma_int_t*, double2*, double2*, double2*, double2*, double2*)’:
magma_zf77pgi.cpp:101: error: invalid conversion from ‘double2*’ to ‘magma_int_t’
magma_zf77pgi.cpp:101: error: invalid conversion from ‘int’ to ‘magmaDoubleComplex*’
magma_zf77pgi.cpp:101: error: invalid conversion from ‘double2*’ to ‘magma_int_t’
../include/magma_z.h:134: error: too few arguments to function ‘magma_int_t magma_zlahru(magma_int_t, magma_int_t, magma_int_t, magma_int_t, magmaDoubleComplex*, magma_int_t, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*)’
magma_zf77pgi.cpp:101: error: at this point in file
magma_zf77pgi.cpp: In function ‘void magma_zhetrd_(char*, magma_int_t*, double2*, magma_int_t*, double*, double*, double2*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:107: error: cannot convert ‘double2*’ to ‘magma_int_t*’ for argument ‘10’ to ‘magma_int_t magma_zhetrd(magma_uplo_t, magma_int_t, magmaDoubleComplex*, magma_int_t, double*, double*, magmaDoubleComplex*, magmaDoubleComplex*, magma_int_t, magma_int_t*)’
make[1]: *** [magma_zf77pgi.o] Error 1
make[1]: Leaving directory `/export/home1/scratch/magma-1.4.1/control'
make: *** [libmagma] Error 2
The make.inc is:
GPU_TARGET = Fermi
CC = gcc
NVCC = nvcc
FORT = gfortran
ARCH = ar
ARCHFLAGS = cr
RANLIB = ranlib
OPTS = -O3 -DADD_ -DMAGMA_SETAFFINITY
F77OPTS = -O3 -DADD_
FOPTS = -O3 -DADD_ -x f95-cpp-input
NVOPTS = -O3 -DADD_ -Xcompiler -fno-strict-aliasing
LDOPTS = -O3 -DADD_
# Depending on how ATLAS and LAPACK were compiled, you may need one or more of:
# -lifcore -ldl -lf2c -lgfortran
# LIB = -llapack -lblas -lf77blas -lcblas -lcublas -lcudart -lstdc++ -lm -lpgfortran -lifcore
# define library directories here or in your environment
CUDADIR = /usr/local/cuda
-include make.check-cuda
LIBDIR = -L/opt/pgi/linux86-64/2014/lib -L/usr/lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2 -L$(CUDADIR)/lib64
LIB = -lrt -lpgmp -lnuma -lpthread -lpgf90 -lpgf90_rpm1 -lpgf902 -lpgf90rtl -lpgftnrtl -lnspgc -lpgc -lm -llapack -lblas -lcudart
INC = -I$(CUDADIR)/include
I would ultimately like to use the PGI compilers. However, if I replace gcc with pgcc the compile process "burps" on the .cpp files. Changing to pgcpp introduces its own set of problems.
So, staying with gcc and gfortran what do I need to do to get this script to run to the end? I will be using the resulting files in a Fortran setting.
Thanks.
ranlib ../lib/libmagma.a
make[1]: Leaving directory `/export/home1/scratch/magma-1.4.1/src'
======================================== control
( cd control && make )
make[1]: Entering directory `/export/home1/scratch/magma-1.4.1/control'
gcc -O3 -DADD_ -DMAGMA_SETAFFINITY -DHAVE_CUBLAS -DMIN_CUDA_ARCH=200 -I/usr/local/cuda/include -I../include -I../control -c zpanel_to_q.cpp -o zpanel_to_q.o
gcc -O3 -DADD_ -DMAGMA_SETAFFINITY -DHAVE_CUBLAS -DMIN_CUDA_ARCH=200 -I/usr/local/cuda/include -I../include -I../control -c zprint.cpp -o zprint.o
gcc -O3 -DADD_ -DMAGMA_SETAFFINITY -DHAVE_CUBLAS -DMIN_CUDA_ARCH=200 -I/usr/local/cuda/include -I../include -I../control -c magma_zf77pgi.cpp -o magma_zf77pgi.o
magma_zf77pgi.cpp: In function ‘void magma_zgebrd_(magma_int_t*, magma_int_t*, double2*, magma_int_t*, double*, double*, double2*, double2*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:77: error: cannot convert ‘double2*’ to ‘magma_int_t*’ for argument ‘11’ to ‘magma_int_t magma_zgebrd(magma_int_t, magma_int_t, magmaDoubleComplex*, magma_int_t, double*, double*, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*, magma_int_t, magma_int_t*)’
magma_zf77pgi.cpp: In function ‘void magma_zgehrd_(magma_int_t*, magma_int_t*, magma_int_t*, double2*, magma_int_t*, double2*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:80: error: invalid conversion from ‘magma_int_t*’ to ‘magma_int_t’
magma_zf77pgi.cpp:80: error: initializing argument 8 of ‘magma_int_t magma_zgehrd(magma_int_t, magma_int_t, magma_int_t, magmaDoubleComplex*, magma_int_t, magmaDoubleComplex*, magmaDoubleComplex*, magma_int_t, magmaDoubleComplex*, magma_int_t*)’
magma_zf77pgi.cpp: In function ‘void magma_zlabrd_(magma_int_t*, magma_int_t*, magma_int_t*, double2*, magma_int_t*, double*, double*, double2*, double2*, double2*, magma_int_t*, double2*, magma_int_t*, double2*, magma_int_t*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:95: error: ‘magma_zlabrd’ was not declared in this scope
magma_zf77pgi.cpp: In function ‘void magma_zlahru_(magma_int_t*, magma_int_t*, magma_int_t*, double2*, magma_int_t*, double2*, double2*, double2*, double2*, double2*)’:
magma_zf77pgi.cpp:101: error: invalid conversion from ‘double2*’ to ‘magma_int_t’
magma_zf77pgi.cpp:101: error: invalid conversion from ‘int’ to ‘magmaDoubleComplex*’
magma_zf77pgi.cpp:101: error: invalid conversion from ‘double2*’ to ‘magma_int_t’
../include/magma_z.h:134: error: too few arguments to function ‘magma_int_t magma_zlahru(magma_int_t, magma_int_t, magma_int_t, magma_int_t, magmaDoubleComplex*, magma_int_t, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*, magmaDoubleComplex*)’
magma_zf77pgi.cpp:101: error: at this point in file
magma_zf77pgi.cpp: In function ‘void magma_zhetrd_(char*, magma_int_t*, double2*, magma_int_t*, double*, double*, double2*, double2*, magma_int_t*, double2*, magma_int_t*)’:
magma_zf77pgi.cpp:107: error: cannot convert ‘double2*’ to ‘magma_int_t*’ for argument ‘10’ to ‘magma_int_t magma_zhetrd(magma_uplo_t, magma_int_t, magmaDoubleComplex*, magma_int_t, double*, double*, magmaDoubleComplex*, magmaDoubleComplex*, magma_int_t, magma_int_t*)’
make[1]: *** [magma_zf77pgi.o] Error 1
make[1]: Leaving directory `/export/home1/scratch/magma-1.4.1/control'
make: *** [libmagma] Error 2
The make.inc is:
GPU_TARGET = Fermi
CC = gcc
NVCC = nvcc
FORT = gfortran
ARCH = ar
ARCHFLAGS = cr
RANLIB = ranlib
OPTS = -O3 -DADD_ -DMAGMA_SETAFFINITY
F77OPTS = -O3 -DADD_
FOPTS = -O3 -DADD_ -x f95-cpp-input
NVOPTS = -O3 -DADD_ -Xcompiler -fno-strict-aliasing
LDOPTS = -O3 -DADD_
# Depending on how ATLAS and LAPACK were compiled, you may need one or more of:
# -lifcore -ldl -lf2c -lgfortran
# LIB = -llapack -lblas -lf77blas -lcblas -lcublas -lcudart -lstdc++ -lm -lpgfortran -lifcore
# define library directories here or in your environment
CUDADIR = /usr/local/cuda
-include make.check-cuda
LIBDIR = -L/opt/pgi/linux86-64/2014/lib -L/usr/lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.1.2 -L$(CUDADIR)/lib64
LIB = -lrt -lpgmp -lnuma -lpthread -lpgf90 -lpgf90_rpm1 -lpgf902 -lpgf90rtl -lpgftnrtl -lnspgc -lpgc -lm -llapack -lblas -lcudart
INC = -I$(CUDADIR)/include
I would ultimately like to use the PGI compilers. However, if I replace gcc with pgcc the compile process "burps" on the .cpp files. Changing to pgcpp introduces its own set of problems.
So, staying with gcc and gfortran what do I need to do to get this script to run to the end? I will be using the resulting files in a Fortran setting.
Thanks.