2

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

  • 英特尔
  • 英伟达
  • AMD。

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

此二进制文件对此有所不同:

  1. 他们在 likange 过程中使用不同的 SDK
  2. 他们试图在运行时找到不同的 OpenCL 平台名称

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

4

1 回答 1

6

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

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

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

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

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

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

于 2012-11-23T10:38:18.710 回答