我一直在玩在其流2.0测试版的ATI OpenCL实现。 OpenCL的在目前的测试版仅使用CPU就目前而言,下一个版本应该支持GPU的内核。我下载流,因为我在我的工作机器有一个ATI GPU。

这会从巨大收益使用GPU中受益我写软件。但是这个软件在客户机器上运行,我没有豪华的(因为许多科学计算环境中有)选择确切的硬件开发,并优化了点。所以我的问题是,如果我分发ATI OpenCL实现我的申请,将意味着它永远无法使用如NVIDIA显卡?如果我使用NVIDIA的OpenCL SDK,它永远不会对AMD芯片的最佳性能运行(考虑到ATI / AMD链接)?

在换句话说,谁是最终负责提供OpenCL实现?将用户能够例如安装在OpenCL“驱动”为自己的NVidia显卡,一起,让他们在最佳性能“驾驶自己的AMD的CPU?

顺便说一句,在那里为OpenCL的任何良好/主动支持论坛远离Khronos的留言板,或者是说的地方去吗?我见过ATI有一个板,和NVIDIA想必都有自己的,哪里OpenCL的用户/开发者社区挂出?它是否已经合并到一个地方?

有帮助吗?

解决方案

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

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

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

其他提示

我知道这是与旧的答案上述一个老问题。想到我会用最新的答案更新。

是的,一个实现的OpenCL内核的代码,并将于今天各种各样的设备上工作,正确地写入平台和设备枚举代码。这是很容易写正确的平台和设备枚举代码,棘手的部分是选择哪一个平台或设备。你或许应该出现在您的应用程序的配置选项,用户可以选择一个或针对每一个运行一个微基准,动态地选择一个并缓存在板凳结果。

人们能够并且将会有一个以上的平台。例如,我的系统有GTX 580 SLI,所以它在NVIDIA平台两个设备。它还具有英特尔OpenCL的SDK,所以我CoreI7 990X至尊CPU也出现在Intel平台的设备。

是开发并使用内置,二进制例如,NVidia的OpenCL的SDK,将在ATI或Intel OpenCL的,和副反之亦然工作。无需有关愁了。

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

我stronly建议测试你对英特尔OpenCL的SDK,在NVIDIA GPU的代码,并在AMD的GPU。你可能会发现错误在一个平台上会引起问题的,但也适用于其他的罚款。你也可能会发现完全罚款代码神秘不会因驾驶员的错误给出的这些平台一个正确的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top