Ogromna różnorodność systemów i wyraźne różnice między dostawcami OpenCL a wersjami sterowników uniemożliwiają kompleksowy przegląd konfiguracji OpenCL. Możemy podać tylko przykład, w tym przypadku dla wersji sterownika NVIDIA 331.89 w systemie Ubuntu 14.04. Mamy nadzieję, że będzie to podstawowe wprowadzenie i pomoże rozwiązać wszelkie problemy, związane z konfiguracją.
Zasada działania funkcji OpenCL wygląda następująco:
Ansel > libOpenCL.so > libnvidia-opencl.so.1 > moduł(y) sterownika jądra > 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 tolibnvidia-opencl.so.331.89
).libnvidia-opencl.so.1
needs to talk to the vendor-specific kernel modulesnvidia
andnvidia_uvm
via device special files/dev/nvidia0
,/dev/nvidiactl
, and/dev/nvidia-uvm
.
Podczas uruchamiania systemu należy utworzyć wymagane pliki specjalne urządzenia (/dev/nvidia*
). Jeśli domyślnie tak się nie dzieje, najłatwiejszym sposobem ich skonfigurowania i upewnienia się, że wszystkie moduły są załadowane, jest zainstalowanie pakietu nvidia-modprobe
.
Konto użytkownika, które musi korzystać z OpenCL z poziomu Ansel, musi mieć dostęp do odczytu/zapisu do specjalnych plików urządzenia NVIDIA. W niektórych systemach pliki te domyślnie umożliwiają dostęp do odczytu i zapisu dla wszystkich, co pozwala uniknąć problemów z uprawnieniami, ale może być dyskusyjne pod względem bezpieczeństwa systemu. Inne systemy ograniczają dostęp do grupy użytkowników, m.in. “wideo”. W takim przypadku twoje konto użytkownika musi być członkiem tej grupy.
Podsumowując, pakiety niezbędne do zainstalowania w tym przypadku to:
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)
Odczytana przez lsmod lista modułów, odnoszących się do NVIDIA, wyglądała następująco:
Lista plików specjalnych urządzeń powiązanych z NVIDIA (ls -l /dev/nvidia*
) powinna wyglądać następująco:
Beware that the major/minor numbers (e.g. 250/0
for /dev/nvidia-uvm
in this example) may vary depending on your system.