我正在尝试确定GPU之间的链接拓扑结构,基本上和
我找到了一个CUDA示例
运行此示例的结果(我稍微修改了输出格式)非常令我困惑(与在同一台机器上运行的
nvidia-smi topo -m
的作用差不多。我找到了一个CUDA示例
topologyQuery
,它基本上为每一对GPU调用
cudaDeviceGetP2PAttribute(&perfRank, cudaDevP2PAttrPerformanceRank, device1, device2)
。运行此示例的结果(我稍微修改了输出格式)非常令我困惑(与在同一台机器上运行的
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获得等级1?为什么PHB获得等级0?
我是否误解了cudaDevP2PAttrPerformanceRank
查询的目的?