wtorek, 9 lutego 2010

Instalacja CUDA Ubuntu 9.04 AMD64

W końcu przemogłem się i postanowiłem napisać krótką instrukcję jak zainstalować CUDA na własnym sprzęcie.

Na początek może o konfiguracji, na jakiej przeprowadziłem instalację (pomijam kwestie sprzętowe):
  • Ubuntu 9.04 AMD64 (oczywiście może być i386)
  • gcc / g++ 4.3.3 (instalacja z paczek Ubuntu)
  • CUDA developer driver x86_64 190.42 (Pobierz)
  • CUDA Toolkit 2.3 (Pobierz)
  • CUDA SDK 2.3 (Pobierz)
  • glutg3-dev (instalacja z paczek Ubuntu, w moim przypadku była to wersja 3.7-25)
  • libxi-dev (instalacja z paczek Ubuntu, w moim przypadku była to wersja 2:1.2.0)
  • libxmu-dev (instalacja z paczek Ubuntu, w moim przypadku była to wersja 2:1.0.4-1)

Przy powyższej konfiguracji software udało się skompilować i uruchomić przykłady z paczki SDK. Możliwe, że drobne odstępstwa od tych konkretnych wersji podanych powyżej, są dozwolone i wszystko powinno działać. Osobiście testowałem instalację na Kubunut 9.10 AMD64 i Debianie Etch i Lenny, AMD64 oraz i386 i za każdym razem udawało się wszystko zainstalować.

A więc do dzieła...

1. Instalacja drivera

Instalacji drivera dokonujemy z trybu konsoli, przy wyłączonym serwerze X. Aby wyłączyć managera okien, najprostszym sposobem jest wydanie polecenia:

$ sudo /etc/init.d/gdm stop

lub w przypadku managera okien KDM:

$ sudo /etc/init.d/kdm stop

Po zatrzymaniu managera i zalogowaniu, uruchamiamy instalatora sterownika:

$sudo sh NVIDIA-Linux-x86_64-190.42-pkg2.run

Cała instalacja polega na wyborze "dalej, dalej", czyli przejściu prze domyślne opcje. Ważne jest by mieć zainstalowane w systemie odpowiednie paczki (z tzw. kernel headers), by poprawnie został skompilowany moduł sterownika. Tylko w Debianie musiałem dodatkowo instalować te pakiety.

Po poprawnym zainstalowaniu i restarcie systemu, powinniśmy mieć załadowany nasz sterownik. Możemy zatem przystąpić do instalacji samej biblioteki CUDA i narzędzi.

2. Instalacja bibliotek

Tym razem wszystkie polecenia możemy wywoływać w konsoli, przy włączonym trybie graficznym. Instalację narzędzi CUDA, możemy przeprowadzić w katalogu domowym użytkownika, bez sudo:

sh cudatoolkit_2.3_linux_64_ubuntu9.04.run

Instalator zapyta o ścieżkę docelową, w moim przypadku była to:

/home/adam

Docelowo instalator do podanej ścieżki doklei /cuda, zatem całość powinna się zainstalować w /home/adam/cuda.

Aby narzędzia CUDA były dostępne dla naszego użytkownika musimy wyedytować zmienną PATH:

$ vim ~/.bashrc

W powyższym pliku na samym końcu dodajemy linijkę

export PATH=$PATH:/home/adam/cuda/bin

i zapisujemy plik. Dzięki czemu zapiszemy sobie na stałe ścieżkę przeszukiwania i narzędzia cuda będą dostępne. Aby linker widział biblioteki CUDA, należy dodać odpowiednią ścieżkę w:

$ sudo vim /etc/ld.so.conf

W pliku tym dopisujemy na końcu linijkę:

/home/adam/cuda/lib64
w przypadku architektury AMD64. W przeciwnym razie wpisujemy po prostu

/home/adam/cuda/lib

Wystarczy teraz wydać polecenie:

$ sudo ldconfig

To w zasadzie wszystko. Możemy sprawdzić jaką wersję kompilatora mamy zainstalowaną:

$ nvcc --version

3. Instalacja CUDA SDK i kompilacja przykładów

Żeby rzeczywiście przetestować naszą instalację i rozpocząć zabawę z CUDA, najlepiej zainstalować pakiet SDK i skompilować zawarte w nim przykłady. Uruchamiamy instalację:

$ sh cudasdk_2.3_linux.run

Instalator powinien wykryć gdzie mamy zainstalowaną bibliotekę CUDA. Jeśli nie podajemy mu odpowiednią ścieżkę:

/home/adam/cuda

Po zainstalowaniu powinno być wszystko OK, ale w moim przypadku nie było. Jeśli nie kompilują się przykłady z SDK, należy najpierw sprawdzić, czy ścieżka do biblioteki została poprawnie ustawiona. Niestey u mnie tak nie było. W pliku:

$ vim ~/NVIDIA_GPU_Computing_SDK/C/common/common.mk

w linii 41, należy odpowiednio zmodyfikować zmienną CUDA_INSTALL_PATH:

CUDA_INSTALL_PATH=/home/adam/cuda

Nie wiedzieć czemu w moim przypadku instalator nie wyedytował automatycznie tej zmiennej.

Jeśli do tego momentu wszystko się udało, to znaczy, że można skompilować przykłady z SDK. Z katalogu ~/NVIDIA_GPU_Computing_SDK/C wydajemy polecenie:

~/NVIDIA_GPU_Computing_SDK/C $ make

Rozpocznie się kompilacja, która może chwilę potrwać. Po skompilowaniu, przykłady można znaleźć w katalogu ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release. Polecam na początek uruchomić test:

$ ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release/deviceQuery

W moim przypadku, na konsolę dostaję taką oto informację diagnostyczną:

CUDA Device Query (Runtime API) version (CUDART static linking)
There is 1 device supporting CUDA

Device 0: "GeForce GTX 260"
CUDA Driver Version: 2.30
CUDA Runtime Version: 2.30
CUDA Capability Major revision number: 1
CUDA Capability Minor revision number: 3
Total amount of global memory: 938803200 bytes
Number of multiprocessors: 27
Number of cores: 216
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: 262144 bytes
Texture alignment: 256 bytes
Clock rate: 1.35 GHz
Concurrent copy and execution: Yes
Run time limit on kernels: Yes
Integrated: No
Support host page-locked memory mapping: Yes
Compute mode: Default (multiple host threads can use this device simultaneously)

Test PASSED

Press ENTER to exit...


No i teraz, kto zgadnie jaką mam kartę ;) To tyle jeśli chodzi o instalację, prawdziwa zabawa zaczyna się dopiero teraz!