The main purpose of this post is to keep all steps of installing cuda toolkit (and R related packages) and in one place. Also I hope this may be useful for someone.
Installing cuda toolkit ( Ubuntu )
First of all we need to install nvidia cuda toolkti. I’am on latest ubuntu 15.04, but found this article well suited for me. But there are few additions:
It is very important to have no nvidia drivers before installation ( first I corrupted my system and have to reinstall it 🙁 ). So I recommend to switch to real terminal (
ctrl + alt + f1
), remove all nvidia stuffsudo apt-get purge nvidia-*
and then follow steps from article above.This will install cuda toolkit and corresponding nvidia drivers.
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1410/x86_64/cuda-repo-ubuntu1410_7.0-28_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1410_7.0-28_amd64.deb
sudo apt-get update
sudo apt-get install cuda
- After installation we need to modify our
.bashrc
file. Add following lines:
export CUDA_HOME=/usr/local/cuda-7.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
PATH=${CUDA_HOME}/bin:${PATH}
PATH=${CUDA_HOME}/bin/nvcc:${PATH}
export PATH
Note, that I added path to nvcc
compiler.
Installing gputools
First simply try:
install.packages('gputools', repos = 'http://cran.rstudio.com/')
After that I recieved:
Unsupported gpu architecture ‘compute_10’
Solving this issue I found this link useful. I have gt525m card and have compute capability 2.1. You can verify your GPU capabilities here. So I downloaded gputools source package:
cd ~
wget http://cran.r-project.org/src/contrib/gputools_0.28.tar.gz
tar -zxvf gputools_0.28.tar.gz
and replace following string
NVCC := $(CUDA_HOME)/bin/nvcc -gencode arch=compute_10,code=sm_10 -gencode arch=compute_13,code=sm_13 -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30
in gputools/src/Makefile
by
NVCC := $(CUDA_HOME)/bin/nvcc -gencode arch=compute_20,code=sm_21
Next try to gzip it back and install from source:
install.packages("~/gputools.tar.gz", repos = NULL, type = "source")
Than I recieved:
rinterface.cu:1:14: fatal error: R.h: No such file or directory #include
We have to adjust R header dir location. First of all look for R.h
:
locate /R.h
replace string R_INC := $(R_HOME)/include
in gputools/src/config.mk
string by found path:
R_INC := /usr/share/R/include
In case we recieve error regarding shared libcublas.so
we also need to adjust links for libcublas
shared library:
sudo ln -s /usr/local/cuda/lib64/libcublas.so.7.0 /usr/lib/libcublas.so.7.0
thanks to this thread.
Testing performance
here is simple benchmark:
library(gputools)
N <- 1e3
m <- matrix(sample(100, size = N*N, replace = T), nrow = N)
system.time(dist(m))
system.time(gpuDist(m))