La gran diversidad de sistemas, y las diferencias marcadas entre los vendedores de OpenCL, y las versiones de drivers; hacen que sea imposible dar una introducción comprensiva de como configurar OpenCL. Solo podemos darle un ejemplo, en este caso para un driver NVIDIA versión 331.89 sobre Ubuntu 14.04. Esperamos que esto le sirva como primera impresión y le ayude a resolver posibles problemas con su configuración específica.
El principio del flujo de OpenCL es algo así:
darktable -> libOpenCL.so -> libnvidia-opencl.so.1 -> kernel driver module(s) -> GPU
darktable enlaza dinámicamente libOpenCL.so
, un sistema de librerías que puede ser accedido desde el buscador de enlaces dinámicos del sistema (ld.so
).
libOpenCL.so
leerá la información específica del archivo del vendedor (/etc/OpenCL/vendors/nvidia.icd
) para encontrar la librería que contiene la implementación específica de OpenCL de dicho vendedor.
La implementación específica OpenCL del vendedor viene como una librería libnvidia-opencl.so.1
(la cual en nuestro caso es un enlace simbólico a libnvidia-opencl.so.331.89
).
libnvidia-opencl.so.1
necesita entenderse con los módulos del kernel específicos del vendedor nvidia
y nvidia_uvm
mediante archivos especiales del dispositivo /dev/nvidia0
, /dev/nvidiactl
, y /dev/nvidia-uvm
.
Al inicio del sistema, se requerirán los archivos especiales del dispositivo (/dev/nvidia*) necesarios para su creación. Si
esto no sucede en su sistema por defecto, la forma mas fácil de configurar esto y asegurarse de que todos los módulos estén
cargados, es instalando el paquete nvidia-modprobe
(el cual, al momento de escribir este manual, solo está disponible por “utopic”, pero funciona bien con “trusty” y “Mint 17”). Puede conseguirlo en este sitio.
Una cuenta de usuario que quiera hacer uso de OpenCL desde darktable, necesitará tener permisos de lectura-escritura sobre los archivos especiales del dispositivo NVIDIA. En algunos sistemas, estos archivos solo tienen permisos de lectura-escritura por defecto, lo cual no genera problemas de permisología pero quizás sea discutible en términos de seguridad del sistema. Otros sistemas restringen el acceso a un grupo de usuarios, p.ej. “video”. En dicho caso, su cuenda de usuario tendrá que pertenecer a ese grupo.
Para resumir, los paquetes que necesitan ser instalados en este caso específico son:
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)
La lista de módulos relacionados de NVIDIA tal como lo reporta lsmod
es:
nvidia nvidia_uvm
La lista de archivos de dispositivos especiales relacionados de NVIDIA (ls -l /dev/nvidia*
) debería ser algo así:
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
Tenga cuidado con números mayores/menores (e.g. 250/0 para /dev/nvidia-uvm
en este ejemplo) que pueden variar dependiendo de su sistema.