darktable page lede image
darktable page lede image

Configurando OpenCL no seu sistema

10.2.4. Configurando OpenCL no seu sistema

A imensa diversidade de sistemas e as diferenças entre fabricantes e drivers torna impossível dar uma visão geral completa da configuração do OpenCL. Só podemos dar um exemplo, neste caso para o driver da NVIDIA versão 331.89 em um sistema Ubuntu 14.04. Esperamos que isto seja útil como primeira impressão e que o ajude a resolver possíveis problemas de seu sistema.

O fluxo de funções do OpenCL é assim:

darktable -> libOpenCL.so -> libnvidia-opencl.so.1 ->módulo driver do kernel-> GPU

  • O darktable carrega dinamicamente libOpenCL.so, uma biblioteca de sistema que deve ser acessível pelo loader dinâmico do sistema (ld.so).

  • libOpenCL.so lê as o arquivo de informações específicas do fabricante (/etc/OpenCL/vendors/nvidia.icd) para encontrar a biblioteca que contém a implementação específica de openCL.

  • A implementação de OpenCL específica do fabricante vem como uma biblioteca libnvidia-opencl.so.1 (que em nosso caso é um link simbólico para libnvidia-opencl.so.331.89).

  • libnvidia-opencl.so.1 precisa falar com os módulos de kernel específicos do fabricante nvidia e nvidia_uvm através de dispositivos especiais /dev/nvidia0, /dev/nvidiactl, e /dev/nvidia-uvm.

Durante a inicialização do sistema, os dispositivos especiais (/dev/nvidia*) precisam ser criados. Se isto não acontecer no seu sistema por default, a maneira mais fácil de garantir que os módulos são carregados é instalar o pacote nvidia-modprobe (que, no momento em que escrevemos este texto, só está disponível para utopic, mas funciona bem com trusty e Mint 17). Você pode obtê-lo neste site.

Uma conta de usuário que queira usar OpenCL a partir do darktable precisa ter acesso de leitura e escrita aos arquivos de dispositivos especiais da NVIDIA. Em alguns sistemas estes arquivos permitem acesso de leitura e escrita por todos, por default, o que evita problemas de permissão, mas pode ser questionável em termos de segurança. Outros sistemas restringem o acesso a um grupo de usuários, por exemplo video. Neste caso, a conta do usuário deve ser membro daquele grupo.

Resumindo, os pacotes que precisam estar instalados neste caso específico são:

  • 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)

A lista de módulos de kernel relacionados a NVIDIA reportada por lsmod é:

nvidia
nvidia_uvm

A lista de arquivos de dispositivos especiais NVIDIA (ls -l /dev/nvidia*) deveria se parecer com:

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

Veja que os números major/minor (por exemplo 250/0 para /dev/nvidia-uvm neste exemplo) podem variar dependendo do seu sistema.