---
title: 介绍
description: "在同一个PCIe节点内两个GPU，GPU0和GPU1，如果GPU0的计算结果或者数据想传到GPU1中，两个GPU之间的通信完全依赖CPU以及PCIe总线，即GPU0首先将数据传送到CPU， CPU再把数据传送到GPU1中。此时可以看到数据传输带宽受限于CPU带宽，且由于copy两次，数据延迟也较大。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/gputuing-wp/kunpenggpu_19_0019.html
sourcePath: /source/zh/perftuning/gputuing-wp/kunpenggpu_19_0019.html
indexId: 8b37e5fa4de8cc1a1881f2583d3a6c3f48c25fdb8d358eba9796cef004de6ae257
---
# 介绍

在同一个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特性，软件上需要BIOS、CUDA和GPU驱动版本支持P2P功能以及应用有调用P2P的API才能使能P2P，充分发挥GPU的带宽以及降低GPU之间数据传输延迟的作用。


鲲鹏平台默认不开启P2P。

单节点P2P性能评估如下图所示。


PCIe各版本8通道和16通道最大带宽数据如表1所示。


**表1 PCIe各版本带宽数据**

| 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特性，可通过以下方式强制打开。

1. 编辑“/etc/modprobe.d/nvidia.conf”文件。
  1 vim /etc/modprobe.d/nvidia.conf

2. 在文件末尾追加一行：
  1 options nvidia NVreg_RegistryDwords="ForceP2P=0x11"


3. 卸载重装NVIDIA驱动。
  1 2 nvidia-uninstall ./NVIDIA-Linux-aarch64-xxx.xx.xx.run
