darktable page lede image
darktable page lede image

Ustawienie OpenCL na twoim systemie

10.2.4. Ustawienie OpenCL na twoim systemie

Wielka różnorodność systemów i różnic rynkowych pomiędzy różnymi dostawcami OpenCL i sterowników sprawia, że opracowanie wyczerpującego podręcznika instalacji OpenCL jest niemożliwe. Służymy jedynie przykładem, w tym przypadku dla sterownika NVIDIA w wersji 331.89 na Ubuntu 14.04. Mamy nadzieję, że spełni on rolę wprowadzającą i pomoże w rozwiązaniu potencjalnych problemów w innej konkretnej konfiguracji.

Podstawowy przepływ funkcji OpenCL jest następujący:

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

  • darktable ładuje dynamicznie libOpenCL.so, bibliotekę systemową, która musi być dostępna dla systemowego loadera dynamicznego (ld.so).

  • libOpenCL.so czyta plik informacji producenta (/etc/OpenCL/vendors/nvidia.icd) w celu znalezienia biblioteki, zawierającej odpowiednią implementację OpenCL dla tej karty.

  • Odrębna dla każdego producenta implementacja OpenCL dystrybuowana jest jako biblioteka libnvidia-opencl.so.1 (będąca w tym przypadku symbolicznym dowiązaniem do libnvidia-opencl.so.331.89).

  • libnvidia-opencl.so.1 potrzebuje komunikować się z dedykowanymi modułami jądra nvidia i nvidia_uvm przez pliki urządzeń /dev/nvidia0, /dev/nvidiactl oraz /dev/nvidia-uvm.

Przy starcie systemu należy stworzyć plik urządzenia (/dev/nvidia*). Jeśli nie dzieje się to domyślnie, najłatwiejszym sposobem na zrobienie tego i upewnienie się, że wszystkie moduły zostały załadowane, jest instalacja pakietu nvidia-modprobe (który w czasie pisania tego dokumentu dostępny był jedynie na utopic, ale działał również dobrze z trusty i Mint 17). Możesz go pobrać stąd.

Konto użytkownika, który chce korzystać z OpenCL z darktable, musi mieć dostęp odczyt-zapis do plików urządzenia NVIDIA. Na niektórych systemach pliki te mają ustawiony dostęp odczyt-zapis dla wszystkich, co likwiduje problem, ale może być dyskusyjne z punktu widzenia bezpieczeństwa. Inne systemy ograniczają dostęp do grupy użytkowników, na przykład video. W takim przypadku konto użytkownika musi być członkiem tej grupy.

Podsumowując, pakiety wymagane w tym konkretnym 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)

Lista modułów jądra związanych z NVIDIA raportowana przez lsmod:

nvidia
nvidia_uvm

Lista plików specjalnych, skojarzonych z NVIDIA (ls -l /dev/nvidia*) wygląda podobnie do:

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

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