很多OpenCL SDK。我应该选择哪一个?

时间:2012-11-23 10:17:34

标签: opencl gpu intel nvidia amd-processor

在我的Windows 7操作系统计算机中,我有三个版本的OpenCL SDKS来自这些供应商:

  • 英特尔
  • NVIDIA
  • AMD。

我用他们每个人构建我的应用程序。 作为输出我有三个不同的二进制文件。 例如: my_app_intel_x86,my_app_amd_x86,my_app_nvidia_x86

这个二进制文件在这方面有所不同:

  1. 他们在利益过程中使用不同的SDK
  2. 他们试图在运行时找到不同的OpenCL平台名称
  3. 我可以只使用一个SDK并在运行时检查平台吗?

1 个答案:

答案 0 :(得分:5)

SDK提供调试工具,平台和可能的扩展,OpenCL API无论如何都保持不变。您可以链接到您想要的任何SDK,它将生成与您可以找到的任何OpenCL运行时兼容的可执行文件。请记住那些是SDK,适用于开发人员 - 最终用户可能只有他的图形驱动程序(支持OpenCL),它不关心你用来构建软件的SDK。

理想情况下,您应该为程序使用默认平台,但让用户覆盖它(您可以在运行时选择各种平台!)。您还可以使用启发式算法来确定哪个设备最快,例如:

  • 遍历每个可用平台
  • 为每个平台,迭代每个设备
  • 以某种方式以相关方式对此设备进行基准测试
  • 选择最快的

此外,如果您使用的是特定扩展程序,请确保只接受支持它们的设备...

  

我可以只使用一个SDK并在运行时检查平台吗?

是的,你绝对可以而且应该这样做,但是我担心“检查平台”的意思 - 正如我上面所说,SDK对你可以运行你构建的程序的平台没有任何影响。我可以使用AMD SDK构建我的代码,并在具有nVidia显卡或英特尔处理器的系统上运行可执行文件就好了(唯一的区别是我可能无法访问将由我提供的特定于AMD的扩展SDK,但扩展程序将被AMD驱动程序识别,因此您甚至不需要安装SDK来运行代码 - 但您将构建它。)