首页 文章

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

提问于
浏览
6

AFAIK它与ICD加载程序扩展一样工作:

  • ICD(可安装的客户端驱动程序)=专有的OpenCL实现= OpenCL运行时;您可以在amdocl.so/dll或IntelOpenCL.so/dll等文件中找到它

  • ICD加载程序(在OpenCL.dll / libOpenCL.so中):用于管理同一系统中的多个ICD

  • 它与OpenCL应用程序链接,并充当ICD的占位符 .

  • 应用程序调用ICD加载程序库导出的函数 . 然而,ICD加载器根据所选的OpenCL平台决定重定向到哪个ICD .

  • ICD加载器机制是必需的,因为供应商's OpenCL implementation usually just supports this vendor'的硬件,但您可能希望在同一个OpenCL应用程序中使用来自不同供应商的多个设备 .

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

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

那有记录吗?

1 回答

  • 1

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

相关问题