【发布时间】:2019-09-18 00:05:59
【问题描述】:
我正在尝试找出 GPU 之间的链路拓扑。
基本上,和nvidia-smi topo -m 做的差不多。
我找到了一个 CUDA 示例 topologyQuery,它基本上调用
cudaDeviceGetP2PAttribute(&perfRank, cudaDevP2PAttrPerformanceRank, device1, device2) 用于每对 GPU。
运行这个例子的结果(我稍微修改了输出表示)让我很困惑(在与同一台机器上nvidia-smi topo -m 的结果进行比较之后):
$ ./topologyQuery
X 1 1 0 0 0 0 0
1 X 0 1 0 0 0 0
1 0 X 0 0 0 1 0
0 1 0 X 0 0 0 1
0 0 0 0 X 1 1 0
0 0 0 0 1 X 0 1
0 0 1 0 1 0 X 0
0 0 0 1 0 1 0 X
$ nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 CPU Affinity
GPU0 X NV1 NV1 NV2 NV2 PHB PHB PHB 0-95
GPU1 NV1 X NV2 NV1 PHB NV2 PHB PHB 0-95
GPU2 NV1 NV2 X NV2 PHB PHB NV1 PHB 0-95
GPU3 NV2 NV1 NV2 X PHB PHB PHB NV1 0-95
GPU4 NV2 PHB PHB PHB X NV1 NV1 NV2 0-95
GPU5 PHB NV2 PHB PHB NV1 X NV2 NV1 0-95
GPU6 PHB PHB NV1 PHB NV1 NV2 X NV2 0-95
GPU7 PHB PHB PHB NV1 NV2 NV1 NV2 X 0-95
来自https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__DEVICE.html:
cudaDevP2PAttrPerformanceRank:一个相对值,表示 两个设备之间的链路性能。较低的价值意味着更好 性能(0 是用于大多数性能链接的值)。
为什么 NV1 排名第一?为什么 PHB 排名为 0?
我是不是误解了cudaDevP2PAttrPerformanceRank查询的目的?
【问题讨论】: