Ubuntu 12.04 „Precise Pangolin“
Ubuntu 11.10 „Oneiric Ocelot“
CUDA ist eine Technik ähnlich wie OpenCL, welche es erlaubt, Berechnungen auf Nvidia-Grafikkarten durchzuführen. Je nach Aufgabenstellungen kann so eine deutliche Geschwindigkeitssteigerung erzielt werden.
Damit CUDA genutzt werden kann ist eine unterstütze Grafikkarte mit aktuellem proprietären Nvidia-Treiber nötig. Notebooks mit Optimus-Technologie können ebenfalls von CUDA profitieren, falls ihre zweite Grafikkarte unterstützt wird. Bumblebee, die Software, welche die Optimus-Grafiklösung auch unter Linux ermöglicht, ist dabei nicht zwingend für CUDA. Es muss aber auch in diesem Fall ein aktueller Grafikkartentreiber von Nvidia installiert sein.
Zuerst muss die Installationsdatei direkt von Nvidias Entwicklerseite als 32bit oder 64bit-Version heruntergeladen werden. Zur Zeit wird die Version 4.2.9 angeboten, welche aber nur für Ubuntu Oneiric 11.10 verfügbar ist (Stand August 2012). Diese Version lässt sich problemlos auch unter Ubuntu Precise 12.04 installieren. Nach dem Herunterladen wird die Datei ausführbar gemacht[1] und mit
sudo ./cudatoolkit_*
installiert[2][3][4]. Während der Installation wird man gefragt, in welches Verzeichnis CUDA installiert werden soll. Dieser Artikel geht davon aus, dass das vorgeschlagene Standard-Verzeichnis /usr/local/cuda gewählt wird.
Nach erfolgreicher Installation ist es nötig folgende Zeilen
1 2 3 | export PATH=${PATH}:/usr/local/cuda/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/cuda/lib64 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia-current:/usr/lib32/nvidia-current |
in die Datei ~/.bashrc im Homeverzeichnis zu schreiben[5]. Nachdem alle Terminalfenster geschlossen sind ist die Installation von CUDA beendet und entsprechende Programme mit CUDA/OpenCL Unterstützung können von nun an Berechnungen auf die Grafikkarte auslagern.
Achtung! Bei Nvidia Optimus Laptops sollte die Zeile export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia-current:/usr/lib32/nvidia-current
nicht in die .bashrc geschrieben werden, da die Intel GPU sonst keine direkte Hardwarebeschleunigung mehr bietet. Alternativ vor dem Ausführen einer CUDA Applikation im selben Terminal den Pfad setzen.
Wenn man selbst Programme mit CUDA Unterstützung schreiben möchte, ist es nötig nebst CUDA zusätzlich auch das SDK zu installieren. Dazu wird wieder von Nvidias Entwicklerseite die Installationsdatei heruntergeladen, ausführbar gemacht und danach mit
./gpucomputingsdk_*
als Nutzer installiert. Während der Installation wird das Verzeichnis ~/NVIDIA_GPU_Computing_SDK als Standard vorgeschlagen, das nach Wunsch geändert werden kann. Um auch die Beispiels-Dateien kompilieren zu können, sind folgende Pakete nötig[6]:
build-essential
freeglut3-dev
libgl1-mesa-glx
libglu1-mesa-dev
libx11-dev
libxi-dev
libxmu-dev
mit apturl
Paketliste zum Kopieren:
sudo apt-get install build-essential freeglut3-dev libgl1-mesa-glx libglu1-mesa-dev libx11-dev libxi-dev libxmu-dev
sudo aptitude install build-essential freeglut3-dev libgl1-mesa-glx libglu1-mesa-dev libx11-dev libxi-dev libxmu-dev
Leider sind die von Nvidia mitgelieferten Makefiles fehlerhaft. Es muss z.B. die Reihenfolge von $(RENDERCHECKGLLIB)
und ${OPENGLLIB}
angepasst werden. Glücklicherweise gibt es einen Blogeintrag mit einem passenden Skript.
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash if [ ! -f cudpp_license.txt ] ; then echo "Dieses Skript muss im SDK-Hauptordner ausgeführt werden!" exit fi echo "Nvidia Makefiles werden korrigiert..." sed -i- 's/\${OPENGLLIB} \$(PARAMGLLIB) \$(RENDERCHECKGLLIB)/$(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB)/' $(find . -type f -print0 | xargs -0 grep -l '${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB)') sed -i- 's/\$(CXX) \$(INC) \$(LIB) -o \(.*\)$/$(CXX) \$(INC) -o \1 $(LIB)/' $(find . -type f -print0 | xargs -0 grep -l '$(CXX) $(INC) $(LIB)') if ! grep USERENDERCHECKGL CUDALibraries/src/randomFog/Makefile ; then sed -i- '/USEGLUT := 1/ a \USERENDERCHECKGL := 1' CUDALibraries/src/randomFog/Makefile fi |
Dieses Skript wird in die Datei ~/NVIDIA_GPU_Computing_SDK/makefiles-korrigieren.sh abgespeichert, ausführbar gemacht und mit
./makefiles-korrigieren.sh
ausgeführt. Nach erfolgreichem Korrigieren der Makefiles wird in den Unterordner C gewechselt und der Kompiliervorgang[7] gestartet. Dieser kann einige Zeit in Anspruch nehmen.
cd ~/NVIDIA_GPU_Computing_SDK/C make
Nach erfolgreichem Kompilieren wird zum Testen in den Unterordner release gewechselt.
cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release
Die Installation von Treibern, CUDA und SDK und das Kompilieren der Beispieldateien waren erfolgreich, wenn z.B.
./boxFilter
ein Bild von Lenna anzeigt. Besitzer von Optimus-Notebooks und installiertem Bumblebee starten die Programme mit
optirun ./boxFilter
Eine Übersicht über die Grafikkarte und CUDA bietet
./deviceQuery
Nvidia GPU-computing Documentation Hersteller-Dokumentation
PyCUDA Projektseite, Phython-Oberfläche zur GPU-Programmierung (ab Ubuntu 12.10 in den Paketquellen)