Error with lapacke and lanczos/lobpcg

73 views
Skip to first unread message

Fabio Durastante

unread,
May 13, 2016, 8:14:04 AM5/13/16
to cusp-users
Hello,

I'm trying to compute both the smaller and largest eigenvalue of a sparse matrix. I've started trying with the two example code for lobpcg and lanczos algorithmsWhen i try to compile, for example the lobpcg (http://cusplibrary.github.io/group__eigensolvers.html#ga1fa0efeaca1603b27f6f0f7dbf3de725), (CUSP library v0.5.1, lapacke 3.6.0, Cuda compilation tools, release 6.5, V6.5.12 with an Ubuntu machine) I get the following error:

/usr/local/include/cusp/lapack/detail/lapack.inl(276): error: no instance of overloaded function "cusp::lapack::detail::sygv" matches the argument list
            argument types are
: (int, char, char, char, int, const ValueType *, int, ValueType *, int, ValueType *)
          detected during
:
            instantiation of
"void cusp::lapack::sygv(const Array2d1 &, const Array2d2 &, Array1d &, Array2d3 &) [with Array2d1=cusp::array2d<double, cusp::host_memory, cusp::column_major>, Array2d2=cusp::array2d<double, cusp::host_memory, cusp::column_major>, Array1d=cusp::array1d<double, cusp::host_memory>, Array2d3=cusp::array2d<double, cusp::host_memory, cusp::column_major>]"
/usr/local/include/cusp/eigen/detail/lobpcg.inl(187): here
            instantiation of
"void cusp::eigen::lobpcg(LinearOperator &, Vector &, Vector &, Monitor &, Preconditioner &, __nv_bool) [with LinearOperator=cusp::csr_matrix<int, double, cusp::device_memory>, Vector=cusp::array1d<double, cusp::device_memory>, Monitor=cusp::monitor<double>, Preconditioner=cusp::identity_operator<double, cusp::device_memory, int>]"
lobpcgtest
.cu(24): here

 
1 error detected in the compilation of "/tmp/tmpxft_000059b9_00000000-8_lobpcgtest.cpp1.ii".

It seems there is some problem with the number and the type of the arguments of the functions. Similar behavior is observed also with the example code for the Lanczos algorithm. Is there a workaround for this issue?

Thanks,

Steven Dalton

unread,
May 15, 2016, 4:48:14 AM5/15/16
to cusp-...@googlegroups.com
Hello,

  Can you test your code using the latest develop branch of Cusp on github? A number of updates have been added to address interface compatibility issues.

Thanks,
Steve

--
You received this message because you are subscribed to the Google Groups "cusp-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cusp-users+...@googlegroups.com.
To post to this group, send email to cusp-...@googlegroups.com.
Visit this group at https://groups.google.com/group/cusp-users.
For more options, visit https://groups.google.com/d/optout.

Fabio Durastante

unread,
May 17, 2016, 6:21:06 AM5/17/16
to cusp-users
Hello again,

I have tried by substituting my cusp library with the (develop) version from git and now I obtain the following errors:

tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrf(int, int, int, float*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x4f): riferimento non definito a "LAPACKE_sgetrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrf(int, int, int, double*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x8f): riferimento non definito a "LAPACKE_dgetrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrf(int, int, int, thrust::complex<float>*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xcf): riferimento non definito a "LAPACKE_cgetrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrf(int, int, int, thrust::complex<double>*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x10f): riferimento non definito a "LAPACKE_zgetrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrf(int, char, int, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x147): riferimento non definito a "LAPACKE_spotrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrf(int, char, int, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x17f): riferimento non definito a "LAPACKE_dpotrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrf(int, char, int, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x1b7): riferimento non definito a "LAPACKE_cpotrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrf(int, char, int, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x1ef): riferimento non definito a "LAPACKE_zpotrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrf(int, char, int, float*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x232): riferimento non definito a "LAPACKE_ssytrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrf(int, char, int, double*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x275): riferimento non definito a "LAPACKE_dsytrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrf(int, char, int, thrust::complex<float>*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x2b8): riferimento non definito a "LAPACKE_csytrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrf(int, char, int, thrust::complex<double>*, int, int*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x2fb): riferimento non definito a "LAPACKE_zsytrf"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrs(int, char, int, int, float const*, int, int const*, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x345): riferimento non definito a "LAPACKE_sgetrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrs(int, char, int, int, double const*, int, int const*, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x393): riferimento non definito a "LAPACKE_dgetrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrs(int, char, int, int, thrust::complex<float> const*, int, int const*, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x3e1): riferimento non definito a "LAPACKE_cgetrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getrs(int, char, int, int, thrust::complex<double> const*, int, int const*, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x42f): riferimento non definito a "LAPACKE_zgetrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrs(int, char, int, int, float const*, int, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x476): riferimento non definito a "LAPACKE_spotrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrs(int, char, int, int, double const*, int, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x4bd): riferimento non definito a "LAPACKE_dpotrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrs(int, char, int, int, thrust::complex<float> const*, int, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x504): riferimento non definito a "LAPACKE_cpotrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potrs(int, char, int, int, thrust::complex<double> const*, int, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x54b): riferimento non definito a "LAPACKE_zpotrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrs(int, char, int, int, float const*, int, int const*, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x599): riferimento non definito a "LAPACKE_ssytrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrs(int, char, int, int, double const*, int, int const*, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x5e7): riferimento non definito a "LAPACKE_dsytrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrs(int, char, int, int, thrust::complex<float> const*, int, int const*, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x635): riferimento non definito a "LAPACKE_csytrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytrs(int, char, int, int, thrust::complex<double> const*, int, int const*, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x683): riferimento non definito a "LAPACKE_zsytrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtrs(int, char, char, char, int, int, float const*, int, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x6d4): riferimento non definito a "LAPACKE_strtrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtrs(int, char, char, char, int, int, double const*, int, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x725): riferimento non definito a "LAPACKE_dtrtrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtrs(int, char, char, char, int, int, thrust::complex<float> const*, int, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x776): riferimento non definito a "LAPACKE_ctrtrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtrs(int, char, char, char, int, int, thrust::complex<double> const*, int, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x7c7): riferimento non definito a "LAPACKE_ztrtrs"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getri(int, int, float*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x801): riferimento non definito a "LAPACKE_sgetri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getri(int, int, double*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x837): riferimento non definito a "LAPACKE_dgetri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getri(int, int, thrust::complex<float>*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x86d): riferimento non definito a "LAPACKE_cgetri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::getri(int, int, thrust::complex<double>*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x8a3): riferimento non definito a "LAPACKE_zgetri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potri(int, char, int, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x8db): riferimento non definito a "LAPACKE_spotri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potri(int, char, int, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x913): riferimento non definito a "LAPACKE_dpotri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potri(int, char, int, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x94b): riferimento non definito a "LAPACKE_cpotri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::potri(int, char, int, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x983): riferimento non definito a "LAPACKE_zpotri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytri(int, char, int, float*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0x9c6): riferimento non definito a "LAPACKE_ssytri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytri(int, char, int, double*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xa09): riferimento non definito a "LAPACKE_dsytri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytri(int, char, int, thrust::complex<float>*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xa4c): riferimento non definito a "LAPACKE_csytri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sytri(int, char, int, thrust::complex<double>*, int, int const*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xa8f): riferimento non definito a "LAPACKE_zsytri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtri(int, char, char, int, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xad3): riferimento non definito a "LAPACKE_strtri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtri(int, char, char, int, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xb17): riferimento non definito a "LAPACKE_dtrtri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtri(int, char, char, int, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xb5b): riferimento non definito a "LAPACKE_ctrtri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::trtri(int, char, char, int, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xb9f): riferimento non definito a "LAPACKE_ztrtri"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::syev(int, char, char, int, float*, int, float*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xbea): riferimento non definito a "LAPACKE_ssyev"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::syev(int, char, char, int, double*, int, double*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xc39): riferimento non definito a "LAPACKE_dsyev"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::stev(int, char, int, float*, float*, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xc83): riferimento non definito a "LAPACKE_sstev"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::stev(int, char, int, double*, double*, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xccd): riferimento non definito a "LAPACKE_dstev"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sygv(int, int, char, char, int, float*, int, float*, int, float*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xd1c): riferimento non definito a "LAPACKE_ssygv"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::sygv(int, int, char, char, int, double*, int, double*, int, double*)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xd6b): riferimento non definito a "LAPACKE_dsygv"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::gesv(int, int, int, float*, int, int*, float*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xdb1): riferimento non definito a "LAPACKE_sgesv"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::gesv(int, int, int, double*, int, int*, double*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xdf7): riferimento non definito a "LAPACKE_dgesv"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::gesv(int, int, int, thrust::complex<float>*, int, int*, thrust::complex<float>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xe3d): riferimento non definito a "LAPACKE_cgesv"
/tmp/tmpxft_00000ca6_00000000-16_lanczos.o: nella funzione "cusp::lapack::detail::gesv(int, int, int, thrust::complex<double>*, int, int*, thrust::complex<double>*, int)":
tmpxft_00000ca6_00000000
-3_lanczos.cudafe1.cpp:(.text+0xe83): riferimento non definito a "LAPACKE_zgesv"
collect2
: error: ld returned 1 exit status

even if i pass directly with the -I option the location of the lapacke.h etc. files (the same is obtained also with the lobpcg.cu test file).

Steven Dalton

unread,
May 17, 2016, 9:40:59 AM5/17/16
to cusp-...@googlegroups.com
Great, it looks like the code is compiling but the linker is not able to find the definitions from the liblapacke.so file. Can you send me your compile commands?

Here's an example of how I compile the lanczos example using lapacke definitions from OpenBLAS.

nvcc -o lanczos.o -c -arch=sm_50 -Xcompiler -O3 -I /home/steve/thrust -I /home/steve/cusplibrary -I /usr/local/cuda/include -I /home/steve/.local/include lanczos.cu
gcc -o lanczos lanczos.o -L/usr/local/cuda/lib64 -L/home/steve/.local/lib -lcudart -lstdc++ -lm -lopenblas -lcublas
Reply all
Reply to author
Forward
0 new messages