AFAIK的工作方式与 ICD加载程序扩展一样:
由于ICD加载器只是一个可选的OpenCL扩展,我想知道OpenCL如何在没有ICD加载器的情况下工作.当然,在这种情况下,您不能同时在同一个应用程序中使用多个供应商的实现,但是用于链接应用程序的是什么?如果开发人员将其与特定实现相关联,则无法再实现OpenCL的主要目标,即可移植性.
或者供应商是否必须提供彼此兼容的动态库?这意味着,如果开发人员链接到供应商A的动态库,那么在运行时,如果目标系统安装了供应商B的动态库,它也可以工作吗?
那有记录吗?
对于 Windows OpenCL 应用程序,您的应用程序包含 OpenCL.h(或 cl.h)和 OpenCL.lib 的链接,OpenCL.lib 是驻留在 Windows System32 文件夹中的 OpenCL.dll 的静态库包装器。您不知道它是 ICD 还是供应商驱动程序。在过去的许多年里,它一直是一个 ICD,但在此之前(对于非常早期的 OpenCL 实现)它是一个供应商驱动程序。ICD 的美妙之处在于应用程序不需要知道,您只需调用 OpenCL API 即可。只有当它是ICD时,平台数量才会大于1。