许多OpenCLSDK';s我应该选择哪一个?

许多OpenCLSDK';s我应该选择哪一个?,opencl,gpu,intel,nvidia,amd-processor,Opencl,Gpu,Intel,Nvidia,Amd Processor,在使用Windows 7操作系统的计算机中,我有三个供应商提供的OpenCL SDK版本: 英特尔 英伟达 AMD 我用它们中的每一个构建我的应用程序。 作为输出,我有三个不同的二进制文件。 例如:my_app_intel_x86、my_app_amd_x86、my_app_nvidia_x86 此二进制文件在以下方面有所不同: 他们在likange过程中使用不同的SDK 他们试图在运行时找到不同的OpenCL平台名称 我可以只使用一个SDK并在运行时检查平台吗?SDK为调试工具、平台以及可

在使用Windows 7操作系统的计算机中,我有三个供应商提供的OpenCL SDK版本:

  • 英特尔
  • 英伟达
  • AMD
我用它们中的每一个构建我的应用程序。 作为输出,我有三个不同的二进制文件。 例如:my_app_intel_x86、my_app_amd_x86、my_app_nvidia_x86

此二进制文件在以下方面有所不同:

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

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

    SDK为调试工具、平台以及可能的扩展提供了一个平台,OpenCLAPI仍然保持不变。您可以链接到任何想要的SDK,它将生成一个与您可以找到的任何OpenCL运行时兼容的可执行文件。请记住,这些都是SDK,是为开发人员准备的-最终用户可能只会有自己的图形驱动程序(启用OpenCL),而不关心您用来构建软件的SDK

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

    • 迭代每个可用的平台
    • 对于每个平台,迭代每个设备
    • 以某种相关方式对该设备进行基准测试
    • 选择最快的一个
    此外,如果您正在使用特定的扩展,请确保只接受支持它们的设备

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


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

    Thomas,感谢您提供完整的答案。我给您这个答案是因为我对AMD、NVIDIA SDK的行为不恰当。2012年3月至4月,我的应用程序在供应商的驱动程序或供应商的用户空间dll中崩溃。我没有太多的空闲时间,所以我决定将其设置为“小型”构建三个具有不同链接的不同二进制文件的变通方法。我将很快尝试构建我的应用程序一次,然后再次在任何地方运行。谢谢。