我一直在他们的 Stream 2.0 beta 中使用 ATI OpenCL 实现。当前测试版中的 OpenCL 目前仅使用 CPU,下一版本应该支持 GPU 内核。我下载 Stream 是因为我的工作机器上有 ATI GPU。
我编写的软件可以通过使用 GPU 获得巨大收益。然而,该软件在客户计算机上运行,我没有奢侈(正如许多科学计算环境所拥有的那样)来选择要为其开发和优化的确切硬件。所以我的问题是,如果我将 ATI OpenCL 实现与我的应用程序一起分发,这是否意味着它将永远无法使用例如英伟达显卡?如果我使用 NVidia OpenCL SDK,它永远不会在 AMD 芯片上以最佳状态运行(考虑 ATI/AMD 链接)?
换句话说,最终谁负责提供OpenCL的实现?用户是否能够例如为他们的 NVidia 显卡安装一个 OpenCL“驱动程序”,同时安装一个可以在 AMD CPU 上提供最佳性能的“驱动程序”?
顺便说一句,除了 Khronos 留言板之外,OpenCL 是否还有任何好的/活跃的支持论坛,或者这是一个可以去的地方?我看到 ATI 有一块主板,NVidia 大概也有自己的主板,OpenCL 用户/开发人员社区在哪里闲逛?难道已经合并到一处了吗?
我知道这是一个老问题,上面有旧答案。我想我会用最新的答案来更新它。
是的,只要正确编写平台和设备枚举代码,OpenCL 内核和代码的一种实现就可以在当今的各种设备上运行。编写正确的平台和设备枚举代码非常容易,棘手的部分是选择哪个平台或设备。您可能应该在应用程序中提供一个配置选项,用户可以在其中选择一个,或者针对每个选项运行微基准测试并动态选择一个并缓存基准结果。
人们可以而且将会拥有多个平台。例如,我的系统有 GTX 580 SLI,因此它在 NVidia 平台中有两个设备。它还具有 Intel OpenCL SDK,因此我的 CoreI7 990x Extreme CPU 也作为 Intel 平台中的设备出现。
是的,使用 NVidia OpenCL SDK 等开发和构建的二进制文件将在 ATI 或 Intel OpenCL 上运行,反之亦然。不用再担心这个了。
显然,最终用户可能没有任何 OpenCL,因此您可能需要延迟加载或 LoadLibrary opencl.dll 和动态链接。
我强烈建议在 NVidia GPU 和 AMD GPU 上针对 Intel OpenCL SDK 测试您的代码。您可能会发现在一个平台上导致问题的错误,但在其他平台上运行良好。您还可能会发现,由于驱动程序错误,完全良好的代码在这些平台之一上神秘地无法给出正确的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)