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í:

Ansel > libOpenCL.so > libnvidia-opencl.so.1 > kernel driver module(s) > 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 to libnvidia-opencl.so.331.89).

  • libnvidia-opencl.so.1 needs to talk to the vendor-specific kernel modules nvidia and nvidia_uvm via device special files /dev/nvidia0, /dev/nvidiactl, and /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 Ansel 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:

 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)

La lista de módulos del kernel relacionados con NVIDIA según lo informado por lsmod fue:

1nvidia
2nvidia_uvm

La lista de archivos especiales de dispositivos relacionados con NVIDIA (ls -l /dev/nvidia*) debería leerse así:

1crw-rw-rw- 1 root root 195,   0 Jul 28 21:13 /dev/nvidia0
2crw-rw-rw- 1 root root 195, 255 Jul 28 21:13 /dev/nvidiactl
3crw-rw-rw- 1 root root 250,   0 Jul 28 21:13 /dev/nvidia-uvm

Beware that the major/minor numbers (e.g. 250/0 for /dev/nvidia-uvm in this example) may vary depending on your system.