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 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
.
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:
La lista de archivos especiales de dispositivos relacionados con NVIDIA (ls -l /dev/nvidia*
) debería leerse así:
Beware that the major/minor numbers (e.g. 250/0
for /dev/nvidia-uvm
in this example) may vary depending on your system.