
Tengo una máquina bi Xeon con Ubuntu 10.10 y una tarjeta gráfica Nvidia GTX 480 y me gustaría usar OpenCL en la CPU y la GPU.
Instalé el último controlador de Nvidia (nvidia-current) con apt-get y descargué e instalé el último kit de herramientas CUDA (3.2) desde la página de Nvidia.
PERO esto solo me permite ejecutar código OpenCL en la GPU Nvidia y NO en la CPU.
Luego leí algunos artículos en Internet que decían que ATI SDK puede ejecutar código OpenCL en la CPU.
Instalé la última versión de los controladores ATI y luego intenté compilar el SDK.
Luego pude ejecutar código en la CPU pero ya no en la GPU.
¿Hay alguna forma de ejecutar código OpenCL tanto en la GPU Nvidia como en la CPU Xeon?
Respuesta1
Tanto la implementación de Nvidia CUDA como la de ATI Stream OpenCL admiten la extensión Khronos ICD, por lo que cuando llame a clGetPlatformIDs obtendrá dos plataformas diferentes y, por lo tanto, podrá consultar dispositivos CPU/GPU en estas plataformas y, por supuesto, la plataforma ATI devolverá la CPU. El dispositivo y la plataforma Nvidia devolverán el dispositivo GPU.
Luego puede crear CommandQueues en estos dispositivos e iniciar su kernel. Por supuesto, esto significa que no es trivial compartir la tarea entre GPU y CPU, pero al menos tener un botón en tu aplicación que cambie de CPU a GPU sería bastante fácil de hacer.