我希望能够在由 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++ 的解决方案。