代码之家  ›  专栏  ›  技术社区  ›  Roel

在混合供应商的硬件上运行OpenCL

  •  12
  • Roel  · 技术社区  · 17 年前

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

    顺便说一句,除了Khronos留言板之外,还有什么好的/活跃的OpenCL支持论坛吗?我看到ATI有一个开发板,NVidia大概也有自己的开发板,OpenCL用户/开发人员社区在哪里?它已经整合到一个地方了吗?

    2 回复  |  直到 17 年前
        1
  •  9
  •   doug65536    14 年前

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

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

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

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

    我强烈建议在NVidia GPU和AMD GPU上针对Intel OpenCL SDK测试您的代码。您可能会在一个平台上发现导致问题的错误,但在其他平台上运行良好。你可能还会发现,由于驱动程序错误,完全好的代码在其中一个平台上神秘地没有给出正确的结果。

        2
  •  6
  •   Eric    17 年前

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