darktable page lede image
darktable page lede image

Configurando OpenCL en su sistema

10.2.4. Configurando OpenCL en su sistema

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 dynamically loads libOpenCL.so, a system library which must be accessible to the system's dynamic loader (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 permiso de escritura-lectura sobre los archivos especiales del dispositivo NVIDIA. En algunos sistemas, estos archivos solo tienen por defecto permiso de lectura-escritura, 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, e.g. video. En dicho caso, su cuenda de usuario tendrá que ser miembro de 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.