Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ubuntu, Linker error, CPU-only #276

Open
ptrajdos opened this issue Apr 5, 2024 · 4 comments
Open

Ubuntu, Linker error, CPU-only #276

ptrajdos opened this issue Apr 5, 2024 · 4 comments

Comments

@ptrajdos
Copy link

ptrajdos commented Apr 5, 2024

Hi.

Im getting an linker error while building thundersvm for working on CPU only.
Im doing

git clone https://github.com/Xtra-Computing/thundersvm.git
cd thundersvm
git submodule init eigen && git submodule update
git submodule update --init src/test/googletest
mkdir build && cd build && cmake -DUSE_CUDA=OFF .. && make -j

As a result Im getting:

[ 96%] Linking CXX executable ../../bin/thundersvm-predict
/usr/bin/ld: ../../lib/libthundersvm.so: undefined reference to `svm_kernel::sum_kernel_values_instant(SyncArray<double> const&, int, SyncArray<int> const&, SyncArray<int> const&, SyncArray<double> const&, SyncArray<float> const&, SyncArray<double>&, int, int, SyncArray<double>&)'
collect2: error: ld returned 1 exit status
make[2]: *** [src/thundersvm/CMakeFiles/thundersvm-predict.dir/build.make:100: bin/thundersvm-predict] Błąd 1
make[1]: *** [CMakeFiles/Makefile2:154: src/thundersvm/CMakeFiles/thundersvm-predict.dir/all] Błąd 2
make[1]: *** Oczekiwanie na niezakończone zadania....
[100%] Linking CXX executable ../../bin/thundersvm-train
/usr/bin/ld: ../../lib/libthundersvm.so: undefined reference to `svm_kernel::sum_kernel_values_instant(SyncArray<double> const&, int, SyncArray<int> const&, SyncArray<int> const&, SyncArray<double> const&, SyncArray<float> const&, SyncArray<double>&, int, int, SyncArray<double>&)'
collect2: error: ld returned 1 exit status
make[2]: *** [src/thundersvm/CMakeFiles/thundersvm-train.dir/build.make:100: bin/thundersvm-train] Błąd 1
make[1]: *** [CMakeFiles/Makefile2:128: src/thundersvm/CMakeFiles/thundersvm-train.dir/all] Błąd 2
make: *** [Makefile:136: all] Błąd 2

Indeed the shared object file do not contain this symbol. The following returns no lines:

nm --demangle --extern-only --defined-only ./lib/libthundersvm.so |grep sum_kernel_values_instant

Grepping the source to find this symbol indicates that the function is defined only in ./src/thundersvm/kernel/kernelmatrix_kernel.cu which is not included in building process for CPU-only version. (Am I right?)
Log of the following command is included.

grep -rni "sum_kernel_values_instant" ../ >./grep.log

grep.log

Host info:
OS: Ubuntu 22.04.4 LTS x86_64
Kernel: 5.15.0-101-generic
CPU: Intel i7-8665U (8) @ 4.800GHz
GPU: Intel WhiskeyLake-U GT2 [UHD Graphics 620]

Best Regards,
Pawel

@xichichixi
Copy link

I encountered the same problem, did you solve it?

@ptrajdos
Copy link
Author

Hi,

Unfortunately, I haven't solved it yet.

Regards,
Pawel

@truc0
Copy link

truc0 commented May 7, 2024

Same problem here.

I found that the svm_kernel::sum_kernel_values_instant function is used in src/thundersvm/model/svmmodel.cpp (the predict_dec_values_instant function) :

However, this is a function declared in include/thundersvm/kernel/kernelmatrix_kernel.h and there is only an implementation of CUDA in src/thundersvm/kernel/kernelmatrix_kernel.cu.

Thus, the compilation will failed in CPU only mode.

@xichichixi
Copy link

xichichixi commented Jun 12, 2024

I solved this problem in an ugly but effective way. After successful compilation, it can be trained and predicted correctly using the adult dataset.

Just comment out the following two lines of code:

This operation will not affect CPU training and prediction

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants