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:

Ansel > libOpenCL.so > libnvidia-opencl.so.1 > kernel driver module(s) > GPU

  • Ansel dynamically loads libOpenCL.so – a system library that must be accessible to the system’s dynamic loader (ld.so).

  • libOpenCL.so reads the vendor-specific information file (/etc/OpenCL/vendors/nvidia.icd) to find the library that contains the vendor-specific OpenCL implementation.

  • The vendor-specific OpenCL implementation comes as a library libnvidia-opencl.so.1 (which in our case is a symbolic link to libnvidia-opencl.so.331.89).

  • libnvidia-opencl.so.1 needs to talk to the vendor-specific kernel modules nvidia and nvidia_uvm via device special files /dev/nvidia0, /dev/nvidiactl, and /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 Ansel, 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:

 1nvidia-331 (331.89-0ubuntu1~xedgers14.04.2)
 2nvidia-331-dev (331.89-0ubuntu1~xedgers14.04.2)
 3nvidia-331-uvm (331.89-0ubuntu1~xedgers14.04.2)
 4nvidia-libopencl1-331 (331.89-0ubuntu1~xedgers14.04.2)
 5nvidia-modprobe (340.24-1)
 6nvidia-opencl-dev:amd64 (5.5.22-3ubuntu1)
 7nvidia-opencl-icd-331 (331.89-0ubuntu1~xedgers14.04.2)
 8nvidia-settings (340.24-0ubuntu1~xedgers14.04.1)
 9nvidia-settings-304 (340.24-0ubuntu1~xedgers14.04.1)
10nvidia-libopencl1-331 (331.89-0ubuntu1~xedgers14.04.2)
11nvidia-opencl-dev:amd64 (5.5.22-3ubuntu1)
12nvidia-opencl-icd-331 (331.89-0ubuntu1~xedgers14.04.2)
13opencl-headers (1.2-2013.10.23-1)

De lijst met NVIDIA-gerelateerde kernelmodules zoals gerapporteerd door lsmod was:

1nvidia
2nvidia_uvm

De lijst met speciale NVIDIA-gerelateerde apparaatbestanden (ls -l /dev/nvidia*) zou er als volgt uit moeten zien:

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

Beware that the major/minor numbers (e.g. 250/0 for /dev/nvidia-uvm in this example) may vary depending on your system.