在没有 ICD 加载器扩展的情况下 OpenCL 如何工作?

问题描述 投票:0回答:2

AFAIK 它的工作原理如下 with 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 扩展,我想知道在没有 ICD 加载器的情况下 OpenCL 如何工作。当然,在这种情况下,您不能在同一个应用程序中同时使用多个供应商的实现,但是使用什么来链接应用程序呢?如果开发人员将其与特定实现联系起来,那么 OpenCL 的主要目标(可移植性)就无法再实现。

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

有记录在案吗?

c dll opencl
2个回答
1
投票

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


0
投票

程序不是针对供应商 OpenCL 实现构建的。它是针对 OpenCL 本身构建的,供应商 OpenCL 是最终用户 GPU 的 OpenCL 实现。

因此,具体实现是针对最终用户的,多个实现仅需要在多 GPU 设置中使用,或者如果您更喜欢特定实现。这与最终用户的偏好有关。

© www.soinside.com 2019 - 2024. All rights reserved.