Instalacja CUDA
W następującym artykule opisana jest instalacja CUDA w Ubuntu 10.04 64bit. Do programowania z CUDA konieczna jest karta graficzna wspierająca technologię CUDA, odpowiedni sterownik Nvidia, CUDA Toolkit i host compiler.
Wszystkie komponenty CUDA mogą zostać darmowo pobrane ze stron Nvidia, host compiler instalowany jest odpowiednio do systemu operacyjnego. Lista z dostępnym oprogramowaniem CUDA pod Windows, Linux iMac OS X, jak i link do aktualnych sterowników developerskich znajduje się na Linux CUDA-Developer Webseite.
Za pomocą instalacji CUDA możliwe jest tworzenie aplikacji, które dokonują obliczeń na karcie graficznej.
Wymagane komponenty
Sprzęt
Karta graficzna Nvidia, która wspiera CUDA. Pomocne informacje na ten temat znajdują się na [1].
Oprogramowanie
- Linux[1]
- Dystrybucja Linux i przynależna wersja gcc. Dostępne są pakiety CUDA do następujących systemów (odpowiednio 32 i 64 Bit):
- Fedora 14
- RedHat Enterprise Linux 5.x i 6.x
- Ubuntu Linux 10.04 i 11.04
- OpenSUSE 11.2
- SUSE Linux Enterprise Server 11 SP1
- Sterownik karty graficznej Nvidia
- Ważnym przy tym jest stosowanie oryginalnego sterownika Nvidia. Zalecane jest stosowanie najaktualniejszej wersji sterownika, ponieważ różni się ona w zakresie stabilności i funkcjonalności od starszych wersji.
- CUDA Toolkit
- Przykłady aplikacji testowych z instalacją SDK
- Dystrybucja Linux i przynależna wersja gcc. Dostępne są pakiety CUDA do następujących systemów (odpowiednio 32 i 64 Bit):
- Windows[2]
- Microsoft Windows XP, Vista, 7, Windows Server 2003 lub 2008 (odpowiednio 32 i 64 Bit). Microsoft Visual Studio 2005, 2008 lub odpowiadające im wersje Express[3]
- Sterownik karty graficznej Nvidia
- Cuda Toolkit
- Przykłady aplikacji testowych z instalacją SDK
- Do Visual Studio dostępne również są przydatne pluginy, które są pomocne w programowaniu. Informacje odnośnie wymagań tych narzędzi znajdują się na [2]:
- MAC OS X[4]
- Mac OS X v. 10.5.6 lub nowszy (10.6.3 lub nowszy dla 64-bitowych aplikacji CUDA) z gcc i przynależnymi narzędziami (instalacja z Xcode)
- Sterownik karty graficznej Nvidia
- Cuda Toolkit
- Przykłady aplikacji testowych z instalacją SDK
Instalacja sterownika NVIDIA
Do kompilacji sterownika potrzebne są przynależne do systemu Kernel-Headers. Zostaną one zainstalowane następującym poleceniem z konsoli:
sudo apt-get install build-essential linux-headers-`uname -r`
Zanim jednak sterowniki będą mogły zostać zainstalowane, muszą zostać usunięte standardowe pakiety, które Ubuntu dostarcza domyślnie sterowniki do kart Nvidia lub instaluje przy aktywacji Restricted Driver.
Za pośrednictwem następującego polecenia mogą zostać usunięte pakiety, które znajdują się w konflikcie ze sterownikiem NVIDIA:
sudo apt-get remove nvidia-173-modaliases nvidia-96-modaliases nvidia-common nvidia-current-modaliases xserver-xorg-video-nv xserver-xorg-video-nouveau
Jeżeli w systemie jest już zainstalowana starsza wersja sterownika to musi ona zostać usunięta:
sudo apt-get remove nvidia-glx nvidia-glx-legacy nvidia-glx-new nvidia-settings
Aby restricted drivers nie były nadal aktualizowane, zostają one dodane do nieaktywnych modułów. Przeprowadzone zostaje to przez dodanie wiersza w pliku "linux-restricted-modules-common".
sudo vi /etc/default/linux-restricted-modules-common
Na końcu tego pliku zostaje dodany następujący wiersz.
DISABLED_MODULES="nv nvidia_new"
Teraz należny zapobiec załadowaniu modułów jadra, które są ładowane z już istniejącymi sterownikami. Moduły te uniemożliwiłyby pomyślne załadowanie sterowników NVIDIA. W celu przeprowadzeniu tego zostaje otwarty plik konfiguracyjny:
sudo vi /etc/modprobe.d/blacklist.conf
i dodane kolejne wiersze:
blacklist vga16fb blacklist nouveau blacklist lbm-nouveau blacklist nvidia-173 blacklist nvidia-96 blacklist nvidia-current blacklist nvidiafb
Właśnie zmieniony plik konfiguracyjny musi zostać poddany aktualizacji:
sudo update-initramfs -u
Teraz może zostać przeprowadzony restart. Po uruchomieniu mogą zostać zainstalowane właściwe sterowniki. W celu przeprowadzenia tego, przed zalogowaniem przechodzimy do konsoli poprzez klawisze:
STRG+ALT+F1
i wyłączamy aktualnie bieżący X-Server:
sudo stop gdm
Sterowniki developerskie znajdują się na stronie CUDA Download. Sterowniki te są przez dłuższy okres aktualne i uważane są za stabilniejsze niż sterowniki desktopowe. Po pobraniu należy przejść do katalogu, w którym znajdują się sterowniki i następnie je zainstalować:
sudo sh ./NVIDIA-Linux-x86_64-285.05.33.run
Na koniec należy się tylko stosować do poleceń instalatora i instalacja jest zakończona. Po zakończeniu instalacji może zostać ponownie uruchomiony X-Server poprzez
sudo start gdm
Update sterownika w nowej wersji jądra
Zaleca się zabezpieczenie pliku instalacyjnego (np. "./NVIDIA-Linux-x86_64-285.05.33.run"), gdyż po aktualizacji jądra sterownik musi zostać ponownie skompilowany. Oznacza to, że po aktualizacji jądra sterownik nie funkcjonuje prawidłowo. Aby to rozwiązać należy z konsoli wykonać następujące polecenie:
sudo sh ./NVIDIA-Linux-x86_64-285.05.33.run -K
Przez co sterownik zostanie na nowo, do nowego jądra, skompilowany. Następnie może znów zostać uruchomiony gdm:
sudo start gdm
Instalacja CUDA Toolkits
Pakiet odpowiedni do dystrybucji może zostać pobrany ze strony Linux CUDA-Developer. Wykorzystywana w tym artykule wersja jest dla Ubuntu Linux 10.4 64bit.
Teraz należy przejść do katalogu zawierającego pobrany pakiet instalacyjny i następująco zainstalowany (z uprawnieniami Superuser):
sudo sh ./cudatoolkit_4.1.28_linux_64_ubuntu10.04.run
Domyślna ścieżka "/usr/local/cuda" zostaje zatwierdzona i pliki zostają zainstalowane. W następnym kroku muszą zostać poprawnie ustalone zmienne ścieżek systemowych, aby w razie potrzeby CUDA Toolkit mógł zostać odnaleziony. Jako pierwsza zostaje dodana zmienna ścieżki instalacyjnej. Dostępne są różne sposoby przeprowadzenia tego, [5]. Tutaj dodawana jest ścieżka do pliku "/etc/environment":
sudo vi /etc/environment
Do zmiennej ścieżki zostaje dodana ścieżka CUDA. Zmodyfikowane wersja wygląda następująco:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin"
Aby zmiany weszły w życie należny się odmeldować i następnie zameldować. Po przeprowadzeniu tego wynik polecenia
echo $PATH
powinien zawierać "/usr/local/cuda/bin".
Dla bibliotek musi zostać zmieniona zmienna ścieżki "LD_LIBRARY_PATH". Do tego zostaje utworzony własny plik konfiguracyjny dla bibliotek CUDA:
sudo vi /etc/ld.so.conf.d/cuda.conf
W tym pliku dodany zostaje wiersz
/usr/local/cuda/lib64
Dla systemów 32-bitowych bez "64".
Za pośrednictwem komendy
sudo ldconfig -v
właśnie zmieniona konfiguracja może zostać aktualizowana. Wynik może zostać skontrolowany przez
sudo ldconfig -v|grep cuda
co powinno dostarczyć wynik podobny do poniższego:
/usr/local/cuda/lib64: libcudart.so.3 -> libcudart.so.3.2.9 libicudata.so.42 -> libicudata.so.42.1 libcuda.so.1 -> libcuda.so.260.19.12 libcuda.so.1 -> libcuda.so.260.19.12
Jeżeli Toolkit jest poprawnie zainstalowany i zmienne ścieżek prawidłowo ustalone to może zostać sprawdzone, czy komenda
nvcc --version
dostarcza następujący wynik:
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2011 NVIDIA Corporation Built on Thu_Jan_12_14:41:45_PST_2012 Cuda compilation tools, release 4.1, V0.2.1221
Instalacja CUDA SDK
CUDA SDK zawiera wiele przykładów, które są na początku w programowaniu pomocne. Udostępnione są również programy, za pośrednictwem których może zostać odczytana konfiguracja dostępnych w systemie kart graficznych. Instalacja SDK odbywa się poprzez uruchomienie, jako normalny użytkownik, pobranego pliku:
sh ./gpucomputingsdk_4.1.28_linux.run
Standardowa ścieżka "~/NVIDIA_GPU_Computing_SDK" może zostać przejęta, ale nie musi. W następnym kroku dostarczone z SDK programy mogą zostać skompilowane. Do przykładów OpenGL wymagane są następujące biblioteki:
sudo apt-get install freeglut3 freeglut3-dev libxi-dev libxmu-dev
Przechodzimy do katalogu instalacyjnego SDK (w tym przypadku domyślna ścieżka) i tam dalej do katalogu, w którym zawarte są przykłady:
cd NVIDIA_GPU_Computing_SDK/C
Komendą
make
programy zostają w końcu skompilowane i skopiowane do katalogu
~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release
Wystąpi podczas kompilowania błąd
/usr/bin/ld: cannot find -lGL collect2: ld returned 1 exit status make[1]: *** [../../bin/linux/release/FunctionPointers] Fehler 1
to przyczyną jest błędny symboliczny link do jednej biblioteki. Rozwiązany może on zostać przez
sudo rm /usr/lib/libGL.so sudo ln -s /usr/lib/libGL.so.1 /usr/lib/libGL.so
Pierwsze uruchomienie programu "deviceQuery" pokazuje czy instalacja przebiegła pomyślnie:
cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release/ ./deviceQuery
Przy karcie GeForce GTX 260 wynik wygląda następująco:
[deviceQuery] starting... ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Found 1 CUDA Capable device(s) Device 0: "GeForce GTX 260" CUDA Driver Version / Runtime Version 4.1 / 4.1 CUDA Capability Major/Minor version number: 1.3 Total amount of global memory: 895 MBytes (938803200 bytes) (27) Multiprocessors x ( 8) CUDA Cores/MP: 216 CUDA Cores GPU Clock Speed: 1.24 GHz Memory Clock rate: 999.00 Mhz Memory Bus Width: 448-bit Max Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048) Max Layered Texture Size (dim) x layers 1D=(8192) x 512, 2D=(8192,8192) x 512 Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 16384 bytes Total number of registers available per block: 16384 Warp size: 32 Maximum number of threads per block: 512 Maximum sizes of each dimension of a block: 512 x 512 x 64 Maximum sizes of each dimension of a grid: 65535 x 65535 x 1 Maximum memory pitch: 2147483647 bytes Texture alignment: 256 bytes Concurrent copy and execution: Yes with 1 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Concurrent kernel execution: No Alignment requirement for Surfaces: Yes Device has ECC support enabled: No Device is using TCC driver mode: No Device supports Unified Addressing (UVA): No Device PCI Bus ID / PCI location ID: 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.1, CUDA Runtime Version = 4.1, NumDevs = 1, Device = GeForce GTX 260 [deviceQuery] test results... PASSED > exiting in 3 seconds: 3...2...1...done!
Odinstalowanie Toolkit i SDK
W celu odinstalowania (np. z powodu konieczności instalacji nowej wersji), muszą zostać jedynie usunięte katalogi "/usr/local/cuda" i "~/NVIDIA_GPU_Computing_SDK". Oczywiście należny wziąć pod uwagę ew. inne projekty, które również znajdują się w tych katalogach.
sudo rm -rf /usr/local/cuda rm -rf ~/NVIDIA_GPU_Computing_SDK
Do instalacja nowego Toolkit i SDK musi zostać jedynie uruchomiony instalator.