Instalacja CUDA

Z Thomas-Krenn-Wiki
Przejdź do nawigacji Przejdź do wyszukiwania

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
  • 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.

Odnośniki