【发布时间】:2015-11-11 11:08:30
【问题描述】:
例如,当我使用带有 CUDA C/C++ 和 GPUDirect 2.0 P2P 的多 GPU 系统,并且我使用嵌套的 PCI-Express 开关时,如图所示,那么我必须知道任意两个 GPU 之间的开关数量。 PCI Bus ID,优化数据传输和分配计算。
或者,如果我已经知道带有 PCIe 开关的硬件 PCIe 拓扑,那么我必须知道,任何 GPU 卡都连接到板上的哪个硬件 PCIe 插槽。
据我所知,即使我已经知道带有 PCIe 交换机的硬件 PCIe 拓扑,那么这些标识符也不会硬绑定到板上的 PCIe 插槽,并且这些 ID 可能会随着系统的运行而改变和不同:
- CUDA device_id
- nvidia-smi/nvml GPU id
- PCI 总线 ID
在 Windows 和 Linux 上通过详细的设备树和板上 PCIe 插槽的数量发现 PCIe 总线拓扑的最佳方法是什么?
【问题讨论】:
-
@Robert Crovella 谢谢。但
nvidia-smi topo仅适用于 Linux,不适用于 Windows - 但我需要它。而nvidia-smi topo -m仅显示任意 2 个 GPU 之间的 4 个值,即显示 PCI 交换机数量:SOC (0 + QPI)、PHB(0)、PXB(1 个或更多)、PIX(1 个内部)。但是如果我的拓扑结构有 2、3 或更多级别的 PCIe-Switch,那么我就无法使用它。 -
也许你应该和你的系统供应商谈谈。它们可能具有您可以使用的专有硬件抽象层或库。您询问的系统架构类型非常奇特,超出了大多数标准设置和工具的范围。
标签: c++ windows cuda pci pci-e