A enorme diversidade de sistemas e as diferenças marcantes entre os fornecedores do OpenCL e as versões do controlador 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:
Ansel > libOpenCL.so > libnvidia-opencl.so.1 > módulo(s) de driver do kernel > 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
.
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
.
Uma conta de usuário que precisa fazer uso do OpenCL a partir do Ansel deve ter acesso de leitura/escrita aos arquivos especiais do dispositivo NVIDIA. Em alguns sistemas, estes arquivos possuem permissão de acesso de leitura e escrita para todo o sistema por padrão, o que evita problemas de permissão, mas pode ser discutível em termos de segurança do sistema. Outros sistemas restringem o acesso a um grupo de usuários, por exemplo, “video”. Neste caso, sua conta de usuário deve ser membro desse grupo.
Em resumo, os pacotes que precisavam ser instalados neste caso específico eram:
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)
A lista de módulos de kernel relacionados à NVIDIA retornada por lsmod foi:
A lista de arquivos especiais de dispositivos relacionados à NVIDIA (ls -l /dev/nvidia*
) deveria ler como:
Beware that the major/minor numbers (e.g. 250/0
for /dev/nvidia-uvm
in this example) may vary depending on your system.