介绍
在同一个PCIe节点内两个GPU,GPU0和GPU1,如果GPU0的计算结果或者数据想传到GPU1中,两个GPU之间的通信完全依赖CPU以及PCIe总线,即GPU0首先将数据传送到CPU, CPU再把数据传送到GPU1中。此时可以看到数据传输带宽受限于CPU带宽,且由于copy两次,数据延迟也较大。
为了解决以上问题,英伟达提出了GPUDirect peer to peer(P2P)技术,主要用于单机不同GPU间的高速通信,它使得GPU可以通过PCIe直接访问目标GPU的显存,避免了通过拷贝到CPU host memory作为中转,大大降低了数据交换的延迟。
GPU P2P需要软硬件都支持才能发挥作用,即硬件上需要GPU、CPU和主板等硬件具备P2P特性,软件上需要
鲲鹏平台默认不开启P2P。
单节点P2P性能评估如下图所示。
PCIe各版本8通道和16通道最大带宽数据如表1所示。
PCIe版本 |
发布年份 |
x8 |
x16 |
---|---|---|---|
1.0 |
2003 |
2.0 GB/s |
4.0 GB/s |
2.0 |
2007 |
4.0 GB/s |
8.0 GB/s |
3.0 |
2010 |
7.88 GB/s |
15.75 GB/s |
4.0 |
2017 |
15.75 GB/s |
31.51 GB/s |
5.0 |
2019 |
31.51 GB/s |
63.02 GB/s |
6.0 |
2021 |
63.02 GB/s |
126.03 GB/s |
鲲鹏920处理器暂不支持NVLink技术,当前采用PCIe 4.0技术,最大带宽为31.51GB/s,默认不开启GPU P2P特性,可通过以下方式强制打开。
- 编辑“/etc/modprobe.d/nvidia.conf”文件。
vim /etc/modprobe.d/nvidia.conf
- 在文件末尾追加一行:
options nvidia NVreg_RegistryDwords="ForceP2P=0x11"
- 卸载重装NVIDIA驱动。
nvidia-uninstall ./NVIDIA-Linux-aarch64-xxx.xx.xx.run
父主题: P2P通信优化