如果没有ICD加载程序扩展,OpenCL如何工作?

时间:2016-06-03 11:38:02

标签: c dll opencl

AFAIK它的工作方式与此一样 ICD加载程序扩展名

  • ICD(可安装的客户端驱动程序)=专有的OpenCL实现= OpenCL运行时;您可以在amdocl.so/dll或IntelOpenCL.so/dll等文件中找到它
  • ICD加载程序(在OpenCL.dll / libOpenCL.so中):用于管理同一系统中的多个ICD
    • 它与OpenCL应用程序链接,并充当ICD的占位符。
    • 应用程序调用ICD加载程序库导出的函数。然而,ICD加载器决定根据所选的OpenCL平台重定向到哪个ICD。
    • ICD加载器机制是必要的,因为供应商的OpenCL实现通常只支持该供应商的硬件,但您可能希望在同一个OpenCL应用程序中使用来自不同供应商的多个设备。

由于ICD加载器只是一个可选的OpenCL扩展,我想知道OpenCL如何在没有ICD加载器的情况下工作。当然,在这种情况下,您不能使用多个供应商'同一个应用程序同时实现,但是用于链接应用程序的是什么?如果开发人员将其与特定实现相关联,则无法再实现OpenCL的主要目标,即可移植性。

供应商是否必须提供彼此兼容的动态库?这意味着,如果开发人员链接到供应商A的动态库,如果目标系统安装了供应商B的动态库,那么在运行时它也可以工作吗?

这有记录吗?

1 个答案:

答案 0 :(得分:1)

对于Windows OpenCL应用程序,您的应用程序包括OpenCL.h(或cl.h)以及OpenCL.lib的链接,OpenCL.lib是OpenCL.dll的静态库包装器,驻留在Windows System32文件夹中。您不知道它是ICD还是供应商驱动程序。在过去的许多年里,它一直是ICD,但在此之前(对于早期的OpenCL实现),它是一个供应商驱动程序。 ICD的美妙之处在于应用程序不需要知道,您只需调用OpenCL API即可。只有当它是ICD时,平台的数量才会大于1。