我希望能够在由 PCI ID 标识的多 GPU 系统上将 OpenCL 设备与系统中的 GPU 进行匹配。
例如,如果我的系统具有多个 GPU(可能来自不同的供应商),我可以通过枚举 PCI 总线来列出设备。这为我提供了 PCI 供应商、设备和总线 ID。如果我根据某些选择标准选择这些(GPU)PCI 设备之一用于 OpenCL 计算,我如何将其与 OpenCL 设备匹配?
我可以使用 OpenCL 枚举 GPU 设备clGetDeviceIDs()但没有明显的方法将 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++ 的解决方案。
做到这一点的方法是使用两个特定于供应商的扩展。对于AMD,你必须使用CL_DEVICE_TOPOLOGY_AMD
它适用于 Windows 和 Linux,并将返回 PCIe 总线 ID,该 ID 对于 GPU 来说是唯一的。在 NVIDIA 上,查询设备的 CL_DEVICE_PCI_BUS_ID_NV。也可以看看:https://anteru.net/2014/08/01/2483/ https://anteru.net/2014/08/01/2483/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)