У меня есть машина bi Xeon с Ubuntu 10.10 и графической картой Nvidia GTX 480, и я хотел бы использовать OpenCL на CPU и GPU.
Я установил последнюю версию драйвера Nvidia (nvidia-current) с помощью apt-get и скачал и установил последнюю версию CUDA Toolkit (3.2) со страницы Nvidia.
НО это позволяет мне запускать только код OpenCL на графическом процессоре Nvidia, а НЕ на процессоре.
Затем я прочитал некоторые статьи в интернете, в которых говорилось, что ATI SDK может запускать код OpenCL на процессоре.
Я установил последнюю версию драйверов ATI, затем попытался скомпилировать SDK.
Затем я смог запустить код на процессоре, но больше не на графическом процессоре.
Есть ли способ запустить код OpenCL как на графическом процессоре Nvidia, так и на процессоре Xeon?
И реализация Nvidia CUDA, и ATI Stream OpenCL поддерживают расширение Khronos ICD, поэтому при вызове clGetPlatformID вы получаете две разные платформы, и, следовательно, вы можете запрашивать устройства CPU / GPU на этих платформах и, конечно, платформа ATI будет верните устройство CPU, а платформа Nvidia вернет устройство GPU.
Затем вы можете создать CommandQueues на этих устройствах и запустить ваше ядро. Конечно, это означает, что разделить задачу между GPU и CPU нетривиально, но, по крайней мере, иметь в приложении кнопку, которая переключается с CPU на GPU, было бы довольно легко.