configurar opencl

A enorme diversidade de sistemas e as diferenças marcantes entre os fornecedores do OpenCL e as versões do driver tornam impossível dar uma visão geral abrangente de como configurar o OpenCL. Podemos dar apenas um exemplo, neste caso, para a versão 331.89 do driver NVIDIA no Ubuntu 14.04. Esperamos que isso sirva como uma introdução básica e ajude você a resolver quaisquer problemas específicos de sua configuração.

O princípio do fluxo da função OpenCL se dá dessa forma:

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

  • o darktable dinamicamente carrega libOpenCL.so – uma biblioteca do sistema que deve ser acessível ao carregador dinâmico (ld.so).

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

  • A implementação OpenCL específica do fornecedor 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 conversar com os módulos de kernel específicos ao fornecedor nvidia e nvidia_uvm por meio dos arquivos especiais de dispositivo /dev/nvidia0, /dev/nvidiactl, e /dev/nvidia-uvm.

Na inicialização do sistema, os arquivos especiais do dispositivo necessário (/dev/nvidia*) precisam ser criados. Caso isto não aconteça em seu sistema por padrão, a maneira mais fácil de configurá-los e assegurar que todos os módulos estão carregados é instalando o pacote nvidia-modprobe.

A user account that needs to make use of OpenCL from within darktable 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.

Em resumo, os pacotes que precisavam ser instalados neste caso específico eram:

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 à NVIDIA retornada por lsmod foi:

nvidia
nvidia_uvm

A lista de arquivos especiais de dispositivos relacionados à NVIDIA (ls -l /dev/nvidia*) deveria ler como:

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

Esteja ciente de que os números maiores/menores (e.g. 250/0 para /dev/nvidia-uvm neste exemplo) pode variar dependendo do seu sistema.

Translations