configurando opencl

La enorme diversidad de sistemas y las marcadas diferencias entre los proveedores de OpenCL y las versiones de los controladores hace que sea imposible ofrecer una descripción general completa de cómo configurar OpenCL. Solo podemos darle un ejemplo, en este caso para la versión 331.89 del controlador NVIDIA en Ubuntu 14.04. Esperamos que esto le sirva como una introducción básica y le ayude a resolver cualquier problema específico de su configuración.

El principio de flujo de la función OpenCL es así:

darktable > libOpenCL.so > libnvidia-opencl.so.1 > kernel driver module(s) > GPU

  • darktable carga dinámicamente libOpenCL.so – una biblioteca del sistema que debe ser accesible para el cargador dinámico del sistema (ld.so).

  • libOpenCL.so lee el archivo de información específico del proveedor (/etc/OpenCL/vendors/nvidia.icd) para encontrar la biblioteca que contiene la implementación de OpenCL específica del proveedor.

  • La implementación de OpenCL específica del proveedor viene como una biblioteca libnvidia-opencl.so.1 (que en nuestro caso es un enlace simbólico a libnvidia-opencl.so.331.89).

  • libnvidia-opencl.so.1 necesita comunicarse con los módulos del kernel específicos del proveedor nvidia y nvidia_uvm a través de archivos especiales de dispositivo /dev/nvidia0, /dev/nvidiactl, y /dev/nvidia-uvm.

Al iniciar el sistema, es necesario crear los archivos especiales del dispositivo necesarios (/dev/nvidia*). Si esto no sucede en su sistema por defecto, la forma más fácil de configurarlos y asegurarse de que todos los módulos estén cargados es instalando el paquete nvidia-modprobe.

Una cuenta de usuario que necesita hacer uso de OpenCL desde darktable debe tener acceso de lectura/escritura a los archivos especiales del dispositivo de NVIDIA. En algunos sistemas, estos archivos permiten el acceso mundial de lectura y escritura de forma predeterminada, lo que evita problemas de permisos, pero puede ser discutible en términos de seguridad del sistema. Otros sistemas restringen el acceso a un grupo de usuarios, p. ej. “video”. En este caso, su cuenta de usuario debe ser miembro de ese grupo.

En resumen, los paquetes que debían instalarse en este caso específico fueron:

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 del kernel relacionados con NVIDIA según lo informado por lsmod fue:

nvidia
nvidia_uvm

La lista de archivos especiales de dispositivos relacionados con NVIDIA (ls -l /dev/nvidia*) debería leerse 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 en cuenta que los números mayores/menores (por ejemplo, 250/0 para /dev/nvidia-uvm en este ejemplo) pueden variar según su sistema.