gpu accelerated solver for convex quadratic programs with benchmarks for svm classificaiton problems
This is essentially a soft fork of that has additional support for a CUDA
lin_sys solver and optimizations for a Nvidia Jetson Nano target device.
To run the project on a Jetson Nano you must have access to the following:
# for problem generation
numpy
scipy
# CUDA libs
cuBLAS
cuSparse
# other
CMake
cuBLAS and cuSPARSE should be there, but you may need to install cmake, numpy and scipy, and possibly gFortran for scipy
To run an SVM classifier
# generate Make files
cmake CMakeLists.txt
# run Make
make
# run svm program
./out/svm_benchmark
To edit the size of the svm problem, you can edit it by modifying:
./benchmarks/svm/generate_problem.py
and then re-run make at the project root directory
In order to switch between using the LDL(cpu) and PCG(gpu) solver, you can directly edit CMakeLists.txt at the root directory to toggle the Enable CUDA support option. Then, re-generate the make files with cmake and run your problem.
[1] B. Stellato, G. Banjac, P. Goulart, A. Bemporad, and S. Boyd, “OSQP: An operator splitting solver for quadratic programs,” Mathematical Programming Computation, 2020. [Online]. Available: https://doi.org/10.1007/s12532-020-00179-2
[2] T. Hastie, R. Tibshirani, and J. Friedman, The Elements of Statistical Learning, ser. Springer Series in Statistics. New York, NY, USA: Springer New York Inc., 2001.
[3] M. Schubiger, G. Banjac, and J. Lygeros, “GPU acceleration of ADMM for large-scale quadratic program- ming,” arXiv:1912.04263, 2019.