OpenCL konfigurieren

Die riesige Vielfalt der Systeme und deutliche Unterschiede zwischen OpenCL-Anbietern und Treiberversionen macht es unmöglich einen umfassenden Überblick darüber zu geben, wie man OpenCL konfiguriert. Wir können dir nur ein Beispiel geben, in diesem Fall für den NVIDIA-Treiber 331.89 für Ubuntu 14.04. Wir hoffen, dass dies als eine grundlegende Anleitung dienen kann und dir helfen wird, spezifische Probleme für dein Setup zu lösen.

Der prinzipielle OpenCL-Funktionsablauf sieht so aus:

darktable > libOpenCL.so > libnvidia-opencl.so.1 > kernel-Treibermodul(e)> GPU

  • darktable lädt libOpenCL.sodynamisch nach– eine Systembibliothek, auf die der dynamische Lader des Betriebssystems (ld.so) Zugriff haben muss.

  • libOpenCL.so liest die herstellerspezifische Informationsdatei (/etc/OpenCL/vendors/nvidia.icd), um die Bibliothek mit der herstellerspezifischen OpenCL-Implementierung zu ermitteln.

  • Die herstellerspezifische OpenCL-Implementierung befindet sich in der Bibliothek libnvidia-opencl.so.1 (in unserem Fall ein symbolischer Link auf libnvidia-opencl.so.331.89).

  • libnvidia-opencl.so.1 kommuniziert mit den herstellerspezifischen Kernelmodulen nvidia und nvidia_uvmüber spezifische Gerätedateien /dev/nvidia0, /dev/nvidiactl und /dev/nvidia-uvm.

Beim Starten des Systems müssen die erforderlichen, spezifischen Gerätedateien (/dev/nvidia*) erzeugt werden. Falls das auf dem eigenen System nicht automatisch passiert, ist der leichteste Weg die Installation des Pakets nvidia-modprobe, um die Dateien zu erzeugen und das Laden aller Module sicherzustellen.

Ein Benutzerkonto, das aus darktable heraus auf OpenCL zugreifen will, muss Lese-/Schreibberechtigung für die NVIDIA spezifischen Gerätedateien haben. Auf einigen Systemen haben diese Dateien Lese-/Schreibzugriff für alle, was die Vergabe von Zugriffsrechten vereinfacht, aber eher fraglich hinsichtlich der Systemsicherheit ist. Andere Systeme beschränken den Zugriff auf eine Benutzergruppe, z.B. “Video”. In diesem Fall muss das Benutzerkonto ein Mitglied dieser Gruppe sein.

Somit sind die Pakete, die in diesem speziellen Fall installiert werden mussten, folgende:

nvidia-331 (331.89-0ubuntu1~xedgers14.04.2)
nvidia-331-dev (331.89-0ubuntu1~xedgers14.04.2)
nvidia-331-uvm (331.89-0ubuntu1~xedgers14.04.2)
nvidia-libopencl1-331 (331.89-0ubuntu1~xedgers14.04.2)
nvidia-modprobe (340.24-1)
nvidia-opencl-dev:amd64 (5.5.22-3ubuntu1)
nvidia-opencl-icd-331 (331.89-0ubuntu1~xedgers14.04.2)
nvidia-settings (340.24-0ubuntu1~xedgers14.04.1)
nvidia-settings-304 (340.24-0ubuntu1~xedgers14.04.1)
nvidia-libopencl1-331 (331.89-0ubuntu1~xedgers14.04.2)
nvidia-opencl-dev:amd64 (5.5.22-3ubuntu1)
nvidia-opencl-icd-331 (331.89-0ubuntu1~xedgers14.04.2)
opencl-headers (1.2-2013.10.23-1)

lsmod hat folgende die Liste von Kernelmodulen für NIVIDIA ausgegeben:

nvidia
nvidia_uvm

Die Liste von gerätespezifischen Dateien für NVIDIA (ls -l /dev/nvidia*) sollte so aussehen:

crw-rw-rw- 1 root root 195,   0 Jul 28 21:13 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Jul 28 21:13 /dev/nvidiactl
crw-rw-rw- 1 root root 250,   0 Jul 28 21:13 /dev/nvidia-uvm

Hinweis: Die Haupt- und Nebennummern (z.B. 250/0 für /dev/nvidia-uvm in diesem Beispiel) können je nach System unterschiedlich sein.

translations