opencl configureren
De enorme diversiteit aan systemen en de duidelijke verschillen tussen OpenCL-leveranciers en stuurprogrammaversies maken het onmogelijk om een uitgebreid overzicht te geven van hoe OpenCL moet worden ingesteld. We kunnen jou alleen een voorbeeld geven, in dit geval voor NVIDIA-stuurprogrammaversie 331.89 op Ubuntu 14.04. We hopen dat dit een basisintroductie zal zijn en jou zal helpen bij het oplossen van eventuele problemen die specifiek zijn voor jouw installatie.
Het principe van de OpenCL-functiestroom is als volgt:
darktable > libOpenCL.so > libnvidia-opencl.so.1 > kernel driver module(s) > GPU
-
darktable laadt dynamisch
libOpenCL.so
– een systeembibliotheek die toegankelijk moet zijn voor de dynamische lader van het systeem (ld.so
). -
libOpenCL.so
leest het leverancierspecifieke informatiebestand (/etc/OpenCL/vendors/nvidia.icd
) om de bibliotheek te vinden die de leverancierspecifieke OpenCL-implementatie bevat. -
De leverancierspecifieke OpenCL-implementatie wordt geleverd als een bibliotheek
libnvidia-opencl.so.1
(wat in ons geval een symbolische link is naarlibnvidia-opencl.so.331.89
). -
libnvidia-opencl.so.1
moet met de leverancierspecifieke kernelmodulesnvidia
ennvidia_uvm
praten via speciale apparaatbestanden/dev/nvidia0
,/dev/nvidiactl
en/dev/nvidia -uvm
.
Bij het opstarten van het systeem moeten de vereiste speciale apparaatbestanden (/dev/nvidia*
) worden aangemaakt. Als dit niet standaard op jouw systeem gebeurt, is de eenvoudigste manier om ze in te stellen en ervoor te zorgen dat alle modules zijn geladen, door het pakket nvidia-modprobe
te installeren.
Een gebruikersaccount dat gebruik moet maken van OpenCL vanuit darktable, moet lees-/schrijftoegang hebben tot de speciale apparaatbestanden van NVIDIA. Op sommige systemen bieden deze bestanden standaard toegang tot lezen en schrijven over de hele wereld, waardoor problemen met de machtiging worden vermeden, maar het kan ter discussie zijn in termen van systeembeveiliging. Andere systemen beperken de toegang tot een gebruikersgroep, b.v. “video”. In dit geval moet jouw gebruikersaccount lid zijn van die groep.
Samenvattend waren de pakketten die in dit specifieke geval moesten worden geïnstalleerd:
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)
De lijst met NVIDIA-gerelateerde kernelmodules zoals gerapporteerd door lsmod was:
nvidia
nvidia_uvm
De lijst met speciale NVIDIA-gerelateerde apparaatbestanden (ls -l /dev/nvidia*
) zou er als volgt uit moeten zien:
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
Houd er rekening mee dat de hoofd-/nevennummers (bijv. 250/0
voor /dev/nvidia-uvm
in dit voorbeeld) kunnen variëren, afhankelijk van jouw systeem.