Величезна різноманітність систем та помітні відмінності між постачальниками OpenCL та версіями драйверів унеможливлює повний огляд того, як налаштувати OpenCL. Ми можемо навести лише приклад, у цьому випадку для драйвера NVIDIA версії 331.89 на Ubuntu 14.04. Ми сподіваємось, що це послужить базовим введенням і допоможе вам вирішити будь-які проблеми, що стосуються вашого налаштування.

Принцип потоку функцій OpenCL такий:

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.

Під час запуску системи потрібно створити необхідні спеціальні файли пристрою (/dev/nvidia*). Якщо цього не відбувається у вашій системі за замовчуванням, найпростіший спосіб налаштувати їх і бути впевненим, що всі модулі завантажені – це встановити пакет nvidia-modprobe.

A user account that needs to make use of OpenCL from within Ansel must have read/write access to NVIDIA’s device special files. On some systems these files allow world read-write access by default, which avoids permission issues but might be debatable in terms of system security. Other systems restrict the access to a user group, e.g. “video”. In this case your user account has to be member of that group.

Підводячи підсумок, пакетами, які потрібно було встановити у цьому конкретному випадку, були:

 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)

Список модулів ядра, пов’язаних з NVIDIA, як повідомляє lsmod:

1nvidia
2nvidia_uvm

Список спеціальних файлів пристроїв, пов’язаних з NVIDIA (ls -l /dev/nvidia*), має виглядати так:

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.