error in linking

Open discussion for MAGMA library (Matrix Algebra on GPU and Multicore Architectures)
Post Reply
welcome2010
Posts: 2
Joined: Tue Oct 13, 2009 9:23 am

error in linking

Post by welcome2010 » Tue Oct 13, 2009 9:37 am

Hi,

I've just downloaded Magma, modified make.inc with path to Intel MKL, and ran make. I'm getting the following error while linking. Could you please let me know if I'm missing anything? Thanks.

make
( cd testing; make )
make[1]: Entering directory `/home/st/sbyna/necla/cuda_trials/benchmarks/magma_0.1/testing'
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_spotrf.cpp -o testing_spotrf.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_spotrf_gpu.cpp -o testing_spotrf_gpu.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_sgeqrf.cpp -o testing_sgeqrf.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_sgeqrf_gpu.cpp -o testing_sgeqrf_gpu.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_sgetrf.cpp -o testing_sgetrf.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_sgetrf_gpu.cpp -o testing_sgetrf_gpu.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_dpotrf.cpp -o testing_dpotrf.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_dpotrf_gpu.cpp -o testing_dpotrf_gpu.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_dgeqrf.cpp -o testing_dgeqrf.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_dgeqrf_gpu.cpp -o testing_dgeqrf_gpu.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_dgetrf.cpp -o testing_dgetrf.o
gcc -O3 -DADD_ -I../include -I/usr/local/cuda/include -c testing_dgetrf_gpu.cpp -o testing_dgetrf_gpu.o
gcc -fPIC testing_spotrf.o -o testing_spotrf -L../lib \
-lcuda -lmagma -lmagmablas -L/opt/intel/mkl721/lib/em64t -L/usr/local/cuda/lib -lmkl_em64t -lguide -lpthread -lcublas -lm get_nb.cpp
testing_spotrf.o: In function `main':
testing_spotrf.cpp:(.text+0x31e): undefined reference to `spotrf_'
testing_spotrf.cpp:(.text+0x383): undefined reference to `slange_'
testing_spotrf.cpp:(.text+0x3cb): undefined reference to `slange_'
../lib/libmagma.a(spotrf.o): In function `magma_spotrf(char*, int*, float*, int*, float*, int*)':
spotrf.cpp:(.text+0x154): undefined reference to `spotrf_'
spotrf.cpp:(.text+0x3ce): undefined reference to `spotrf_'
spotrf.cpp:(.text+0x429): undefined reference to `spotrf_'
../lib/libmagma.a(auxiliary.o): In function `dqrt02(int*, int*, int*, double*, double*, double*, double*, int*, double*, double*, int*, double*, double*)':
auxiliary.cpp:(.text+0x450): undefined reference to `dlamch_'
auxiliary.cpp:(.text+0x481): undefined reference to `dlaset_'
auxiliary.cpp:(.text+0x4b5): undefined reference to `dlacpy_'
auxiliary.cpp:(.text+0x4f7): undefined reference to `dorgqr_'
auxiliary.cpp:(.text+0x521): undefined reference to `dlaset_'
auxiliary.cpp:(.text+0x546): undefined reference to `dlacpy_'
auxiliary.cpp:(.text+0x5b6): undefined reference to `dlange_'
auxiliary.cpp:(.text+0x5eb): undefined reference to `dlange_'
auxiliary.cpp:(.text+0x66e): undefined reference to `dlaset_'
auxiliary.cpp:(.text+0x6c5): undefined reference to `dlansy_'
../lib/libmagma.a(auxiliary.o): In function `sqrt02(int*, int*, int*, float*, float*, float*, float*, int*, float*, float*, int*, float*, float*)':
auxiliary.cpp:(.text+0x780): undefined reference to `slamch_'
auxiliary.cpp:(.text+0x7b1): undefined reference to `slaset_'
auxiliary.cpp:(.text+0x7e5): undefined reference to `slacpy_'
auxiliary.cpp:(.text+0x827): undefined reference to `sorgqr_'
auxiliary.cpp:(.text+0x851): undefined reference to `slaset_'
auxiliary.cpp:(.text+0x876): undefined reference to `slacpy_'
auxiliary.cpp:(.text+0x8e6): undefined reference to `slange_'
auxiliary.cpp:(.text+0x91f): undefined reference to `slange_'
auxiliary.cpp:(.text+0x9b3): undefined reference to `slaset_'
auxiliary.cpp:(.text+0xa0a): undefined reference to `slansy_'
collect2: ld returned 1 exit status
make[1]: *** [testing_spotrf] Error 1
make[1]: Leaving directory `/home/st/sbyna/necla/cuda_trials/benchmarks/magma_0.1/testing'
make: *** [test] Error 2

Stan Tomov
Posts: 283
Joined: Fri Aug 21, 2009 10:39 pm

Re: error in linking

Post by Stan Tomov » Tue Oct 13, 2009 1:57 pm

Hi,
The undefined functions are in the LAPACK library and should be recognized (in general) in the MKL library when you link with
"-L/opt/intel/mkl721/lib/em64t -lmkl_em64t -lguide"
What version of gcc and mkl are you using? We use mkl 10.0.1.014 and compile exactly in the way you are trying.
Would replacing "-lmkl_em64t -lguide" by "-lmkl_sequential -lmkl_intel_lp64 -lmkl_core" work?
If not what are you getting from
nm /opt/intel/mkl721/lib/em64t/libmkl_intel_lp64.a | grep 'spotrf_'

Something like this?
_spotrf_lp64.o: 0000000000000000 T spotrf_


Stan

welcome2010
Posts: 2
Joined: Tue Oct 13, 2009 9:23 am

Re: error in linking

Post by welcome2010 » Wed Oct 14, 2009 9:48 am

Hi Stan,

Thanks for your response. Replacing "-lmkl_em64t -lguide" with "-lmkl_lapack -lmkl_em64t -lguide" helped solving the problem. Older versions of MKL (7.2.1 in our case) probably have the LAPACK library separately.

Suren.

Post Reply