【发布时间】:2011-11-08 18:08:05
【问题描述】:
我希望能够在由 PCI ID 标识的多 GPU 系统上将 OpenCL 设备与系统中的 GPU 进行匹配。
例如,如果我有一个带有多个 GPU 的系统,可能来自不同的供应商,我可以通过枚举 PCI 总线来列出设备。这给了我 PCI 供应商、设备和总线 ID。如果我根据某些选择标准选择这些 (GPU) PCI 设备之一用于 OpenCL 计算,如何将其与 OpenCL 设备匹配?
我可以使用 clGetDeviceIDs() 在 OpenCL 中枚举 GPU 设备,但是没有明显的方法可以将 OpenCL 设备与 PCI 设备匹配。 OpenCL 函数 clGetDeviceInfo() 提供对 PCI 供应商 ID 和设备名称的访问,但不提供对 PCI 设备或总线 ID 的访问。我可以尝试将 PCI 设备名称与 OpenCL 设备名称进行匹配,但您可能拥有多个相同类型的设备,而且名称并不总是相同。
为什么这是必要的?假设我知道程序 X 在 GPU A 上运行 CUDA 或其他东西。我想避免也将 GPU A 用于 OpenCL 操作,所以我选择 GPU B。然后我需要确定哪个 OpenCL 设备是 GPU A,哪个是 GPU B. PCI ID 似乎是识别 GPU 设备的唯一一致且跨平台的方式。
顺便说一句,CUDA API 确实为您提供了 PCI、总线和插槽 ID(CU_DEVICE_ATTRIBUTE_PCI_BUS_ID、CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID),但 CUDA 仅适用于 NVidia 设备。
理想情况下,我需要使用 C 或 C++ 的解决方案。
【问题讨论】:
-
规范说 CL_DEVICE_VENDOR_ID “可能是 PCIe ID”。如果这不能得到你想要的,那么我认为规范中没有任何东西可以。不过,仍然不确定为什么需要这个。听起来像是过早的优化。
-
@vocaro:是的,我可以获得供应商 ID。我认为你没有理解这个问题。
-
您说您想知道 PCI 设备 ID 以避免与可能正在使用特定 PCI 设备 ID 的另一个进程发生争用。我想知道您如何知道正在使用哪些 PCI 设备?我猜你没有为此使用 OpenCL?
-
最近它添加了一个新的 Khronos 扩展,可以在这里提供帮助:khronos.org/registry/OpenCL/specs/3.0-unified/html/…