11

我一直在玩他们 Stream 2.0 beta 中的 ATI OpenCL 实现。当前测试版中的 OpenCL 目前仅使用 CPU,下一个版本应该支持 GPU 内核。我下载了 Stream,因为我的工作机器中有一个 ATI GPU。

我编写的软件可以从使用 GPU 的收益中受益匪浅。然而,这个软件在客户机器上运行,我没有奢侈(就像许多科学计算环境一样)选择要开发的确切硬件,并为此进行优化。所以我的问题是,如果我将 ATI OpenCL 实现与我的应用程序一起分发,这是否意味着它将永远无法使用例如 NVidia 视频卡?如果我使用 NVidia OpenCL SDK,它永远不会在 AMD 芯片上以最佳方式运行(考虑到 ATI/AMD 链接)?

换句话说,最终谁负责提供 OpenCL 实现?用户是否能够为他们的 NVidia 视频卡安装一个 OpenCL“驱动程序”,以及一个为他们的 AMD CPU 提供最佳性能的“驱动程序”?

顺便说一句,除了 Khronos 留言板之外,还有什么好的/积极的 OpenCL 支持论坛,或者那是去的地方吗?我看到 ATI 有一块板,NVidia 大概也有自己的,OpenCL 用户/开发者社区在哪里闲逛?它是否已经合并到一个地方?

4

2 回答 2

9

我知道这是一个老问题,上面有老答案。以为我会用最新的答案更新它。

是的,OpenCL 内核和代码的一种实现将适用于当今具有正确编写的平台和设备枚举代码的各种设备。编写正确的平台和设备枚举代码非常容易,棘手的部分是选择哪个平台或设备。您可能应该在您的应用程序中提供一个配置选项,用户可以在其中选择一个,或者针对每个选项运行一个微基准测试并动态选择一个并缓存基准测试结果。

人们可以而且将会拥有不止一个平台。例如,我的系统有 GTX 580 SLI,所以它在 NVidia 平台上有两个设备。它还具有 Intel OpenCL SDK,因此我的 CoreI7 990x Extreme CPU 也作为 Intel 平台中的设备出现。

是的,使用例如 NVidia OpenCL SDK 开发和构建的二进制文件可以在 ATI 或 Intel OpenCL 上运行,反之亦然。再也不用担心这个了。

显然,最终用户可能没有任何 OpenCL,因此您可能需要延迟加载或 LoadLibrary opencl.dll 和动态链接。

我强烈建议在英特尔 OpenCL SDK、NVidia GPU 和 AMD GPU 上测试您的代码。您可能会发现在一个平台上导致问题的错误,但在其他平台上却可以正常工作。您可能还会发现,由于驱动程序错误,完全好的代码在其中一个平台上神秘地无法给出正确的结果。

于 2012-03-10T05:56:31.243 回答
6

最终,OpenCL 将以与 OpenGL 相同的方式工作。也就是说,用户将从他们的硬件供应商(ATI、NVIDIA、Intel)安装当前的驱动程序。作为开发人员,您在构建应用程序时只需链接到 OpenCL 库。当用户运行您的应用程序时,应用程序将重定向到驱动程序提供的相应供应商特定库。

这是它将工作的方式,但它还没有以这种方式工作。

要记住的另一件重要事情是,您可能仍然需要提供供应商特定的代码路径,因为使用 OpenCL 在 CPU 上运行的代码可能会使用与在 GPU 上运行的代码不同的优化内核参数。GPU 供应商之间的差异可能也是如此。

于 2009-09-07T09:35:25.343 回答