我有一台双 Xeon 机器,上面装有 Ubuntu 10.10 和 Nvidia GTX 480 显卡,我想在 CPU 和 GPU 上使用 OpenCL。
我使用 apt-get 安装了最新的 Nvidia 驱动程序 (nvidia-current),并从 Nvidia 页面下载并安装了最新的 CUDA Toolkit (3.2)。
但这只允许我在 Nvidia GPU 上运行 OpenCL 代码,而不能在 CPU 上运行。
然后我在网上读到一些文章说 ATI SDK 能够在 CPU 上运行 OpenCL 代码。
我安装了最新版本的 ATI 驱动程序,然后尝试编译 SDK。
然后我能够在 CPU 上运行代码,但不能再在 GPU 上运行代码。
有没有办法可以在 Nvidia GPU 和 Xeon CPU 上运行 OpenCL 代码?
答案1
Nvidia CUDA 和 ATI Stream OpenCL 实现都支持 Khronos ICD 扩展,因此当您调用 clGetPlatformIDs 时,您将获得两个不同的平台,因此您可以在这些平台上查询 CPU/GPU 设备,当然 ATI 平台将返回 CPU 设备,Nvidia 平台将返回 GPU 设备。
然后您可以在这些设备上创建 CommandQueues 并启动内核。当然,这意味着在 GPU 和 CPU 之间共享任务并非易事,但至少在您的应用程序中有一个从 CPU 切换到 GPU 的按钮会很容易做到。