Upute za pokretanje
Pripremljeni programi su namijenjeni izvođenju u GNU/Linux okruženju na sustavu koji ima NVIDIA grafičku karticu s CUDA podrškom. Kako bi izvođenje bilo moguće, potrebno je imati sljedeće:
- Instaliran NVIDIA proprietary display driver
- Instaliran GCC C kompajler
- Instaliran NVIDIA CUDA Toolkit s NVCC compilerom
Instalacija potrebnih programa na Fedora 20 sustavima
Prvo je potrebno instalirati neke zavisnosti:
# yum install VirtualGL
# yum install VirtualGL.i686
# yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora20/noarch/bumblebee-release-1.1-1.noarch.rpm
# yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree/fedora20/noarch/bumblebee-nonfree-release-1.1-1.noarch.rpm
# yum install glibc-devel
# yum -y install bumblebee-nvidia
Ja sam imao konflikt s xorg driverima za NVIDIA grafičku, pa sam prije ove zadnje naredbe morao ukloniti konfliktne pakete, pa tek ju onda pokrenuti:
Nakon reboota "bi se trebao" kompajlirati kernel driveri od NVIDIA-e. Kao zaključak cjelodnevnog manevra instalacije, to nije bio slučaj. Bumblebee pripremi kernel driver, ali defaultni "noveau" driver je tvrdokoran i ne da se tek tako izbaciti. Ako:
ne daje nikakve rezultate, znači da se treba malo još pozabaviti s nouveau-om. Uspjeli smo ga isključiti tako što smo pobrisali iz modprobe konfiguracijskog direktorija "blacklist" datoteku koja je sprječavala nvidijin driver:
# rm nvidia.blacklist
Na Fedori 20 nije potrebno imati ručno unesenu xorg.conf datoteku jer će sustav sam pokušati otkriti adekvatne postavke. Za slučaj da je to ipak potrebno, trebalo bi imati nešto ovako u datoteci (/etc/X11/xorg.conf):
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" EndSection
Zatim samo treba kreirati novu initramfs datoteku kako bi se u potpunosti izbacio tvrdokorni noveau:
# dracut /boot/initramfs-$(uname -r).img $(uname -r)
Sad treba rebootati sustav kompletno, te kad se učita može se ispitati je li NVIDIA driver konačno aktivan. Ukoliko se dobije ovakav ispis od lsmod naredbe, vjerojatno je sve postavljeno kako treba:
$ lsmod | grep -i nvidia nvidia_uvm 35125 0 nvidia 10538096 57 nvidia_uvm drm 283747 2 nvidia i2c_core 38656 4 drm,i2c_i801,nvidia,videodev
Sada se može skinuti CUDA toolkit za Fedoru 20 x64 s nVIDIA-inih stranica:
Za Ubuntu na NVIDIA developer stranicama nude pripadajuću DEB datoteku. Sad treba instalirati sam repozitorij pomoću RPM-a:
Treba prije toga imati RPM Fusion repozitorij instaliran, a ako to već nije napravljeno, treba otići na službene stranice RPM Fusiona i instalirati paket ili ručno konfigurirati novi repozitorij.
Sad još nedostaju neke specifične CUDA ovisnosti:
Zatim se može konačno instalirati i sam CUDA toolkit:
Nama se CUDA toolkit instalirao na defaultnu putanju, /usr/local/cuda-6.5, pa je trebalo dodati još ručno putanju do instalacije na sistemski PATH. To se može napraviti tako što se otvori korisnička datoteka ~/.bashrc u tekst editoru i dodaju sljedeće linije na kraj:
export CUDA_HOME=/usr/local/cuda-6.5 export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 PATH=${CUDA_HOME}/bin:${PATH} export PATH
Nakon reboota, trebao bi raditi NVIDIA CUDA C Compiler (nvcc) i moći se pokrenuti Makefileovi uključeni s projektom.
Kroz opisani postupak smo morali provesti vlastitu instalaciju Fedore 20 da bi se mogao koristiti CUDA toolkit. Za Ubuntu, pretpostavljamo da su generalni koraci slični:
- Instalirati proprietary NVIDIA driver
- Instalirati GCC, G++, kernel-dev pakete koji su dependency
- Skinuti DEB repozitorija za NVIDIA CUDA Toolkit s https://developer.nvidia.com/cuda-downloads
- apt-get update && apt-get install cuda
Upute o Makefileu
Priloženi makefileovi koriste nvcc kompajler i uz kompajlersku opciju "--gpu-architecture=compute_12" jer konkretna grafička kartica na kojoj smo testirali programe (GeForce 315M, GPU GT218) ima podržani compute capability od 1.2. Druge grafičke možda imaju slabiju ili jaču compute verziju, pa bi vjerojatno bilo dobro promijeniti u makefile-u parametar vezan uz NVCC opcije da se reflektira target GPU.
Primjerice, za compute capability 2.0 se može promijeniti CUDA_PARAMS varijabla u makefileu iz compute_12 u compute_20:
LIBS = -lm -lGL -lGLU -lglut
CFILES := $(wildcard *.cu)
CUDA_PARAMS = --gpu-architecture compute_20
OFILES = $(CFILES:%.cu=%.co)
Popis svih grafičkih i compute capability verzija može se naći na Wikipedija stranici o CUDA-i, pod poglavljem o podržanim GPU-ovima. NVIDIA ima službeni website, ali compute capability manji od 2.0 je depreciran pa grafičke s tim GPUima nisu uopće na popisu.
Makefileovi traže ".cu" datoteke i generiraju binarne istoimene ".co" objekte koji se mogu pokrenuti, slično .x datotekama s vježbi.
$ ./program.co
Na sličan način bi se sada trebali moći pokrenuti i ostali primjeri.
Pokretanje primjera
-
Compile C i CU izvornih datoteka
$ cd mandelbrot
$ make
$ cd ../matrice
$ make mnozenje
$ make -
Množenje malih matrica s nvidia CUDA
$ ./mnozenje-cuda.co
-
Množenje matrica 1000x1000 bez NVIDIA CUDA-e
$ ./mnozenje.o
-
Množenje matrica 1000x1000 s NVIDIA CUDA-om
$ ./mnozenje-cuda-velike.co
-
Generiranje Mandelbrotovog skupa pomoću NVIDIA CUDA-e i prikaz pomoću OpenGL-a
$ cd ../mandelbrot
$ ./mandelbrot.co