
У меня есть компьютер с двумя процессорами 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?
решение1
Реализации Nvidia CUDA и ATI Stream OpenCL поддерживают расширение Khronos ICD, поэтому при вызове clGetPlatformIDs вы получите две разные платформы, и, следовательно, вы можете запросить устройства CPU/GPU на этих платформах, и, конечно же, платформа ATI вернет устройство CPU, а платформа Nvidia вернет устройство GPU.
Затем вы можете создать CommandQueues на этих устройствах и запустить свое ядро. Конечно, это означает, что разделить задачу между GPU и CPU не так уж и просто, но по крайней мере иметь кнопку в вашем приложении, которая переключается с CPU на GPU, было бы довольно просто.