konfiguracja opencl

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:

darktable > libOpenCL.so > libnvidia-opencl.so.1 > moduł(y) sterownika jądra > GPU

  • darktable dynamicznie ładuje libOpenCL.so – bibliotekę systemową, która musi być dostępna dla dynamicznego programu ładującego systemu (ld.so).

  • libOpenCL.so odczytuje plik informacji specyficznych dla dostawcy (/etc/OpenCL/vendors/nvidia.icd), aby znaleźć bibliotekę zawierającą implementację OpenCL specyficzną dla dostawcy.

  • Implementacja OpenCL specyficzna dla dostawcy jest dostępna jako biblioteka libnvidia-opencl.so.1 (która w naszym przypadku jest dowiązaniem symbolicznym do libnvidia-opencl.so.331.89).

  • libnvidia-opencl.so.1 musi komunikować się z modułami jądra danego dostawcy nvidia i nvidia_uvm poprzez specjalne pliki urządzenia /dev/nvidia0, /dev/nvidiactl i /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 darktable, 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:

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)

Odczytana przez lsmod lista modułów, odnoszących się do NVIDIA, wyglądała następująco:

nvidia
nvidia_uvm

Lista plików specjalnych urządzeń powiązanych z NVIDIA (ls -l /dev/nvidia*) powinna wyglądać następująco:

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

Pamiętaj, że główne/podrzędne numery (np. 250/0 dla /dev/nvidia-uvm w tym przykładzie) mogą się różnić w zależności od twojego systemu.

translations