# 双卡 / 多卡 TP 跑通 P2P 的完整实战：从 BIOS 到带宽实测

> R9700 等多卡张量并行的落地全记录：主板选型、BIOS 三件套、ACS 绕过、卡间带宽实测数据与常见坑。

> 基于抡锤者论坛（lcz.me）热帖的实测数据整理。多卡张量并行（TP）能不能跑出预期速度，八成卡死在"卡间通信"这一环。这篇把从主板选型到带宽实测的完整链路写清楚，附真实数字。

## 一、为什么多卡 TP 这么难：卡在"卡间通信"

单卡装得下就单卡跑，这是第一原则。真正需要多卡 TP 的是"一张卡装不下、又要并发"的场景。TP 的瓶颈不是单卡算力，而是**卡间 all-reduce 的带宽**——每生成一个 token 都要做 all-reduce，消息小、次数密、对延迟极其敏感。

关键数字（论坛实测）：

- 没有 P2P 时，RCCL 退回 SHM（经主机内存中转），实测带宽只有 **约 6.9 GB/s**
- 走上 PCIe switch 直接 P2P 后，能到 **约 10.3 GB/s**，双向聚合约 **19.7 GB/s**
- 两张卡对主机的流量仍共享那条 Gen3 x16 上行（约 **15.75 GB/s**），switch **不会**把这条变宽

一句话结论：**switch 治的是通信，不是算力**。它买到的是卡间直连不经主机、延迟更低，顺带绕开很多老平台上 P2P 根本不通的问题。单请求、单卡跑的话，买 switch 基本白花钱。

## 二、主板与 BIOS：能跑 P2P 的硬条件

多卡 TP 对主板的要求，论坛总结得很清楚，必须满足：

1. **两条插槽都直连 CPU**（能拆成 x8/x8 的 PCIe 4.0/5.0 即可，不必硬上 x16）——第二个长插槽若实际接芯片组，不行
2. BIOS 三件套：
   - **Above 4G Decoding = ON**
   - **Resizable BAR (ReBAR) = ON**
   - **CSM = OFF**

ReBAR 是"两卡能互相看见对方显存"的**必要**条件（否则 GPU 认不到另一张卡的地址），但不是全部。

论坛确认支持 ReBAR 的老平台主板型号（供参考）：X99 系列的 4MF/4MT/4MTPLUS/4MFPLUS、8D3/8D4/AD3/AD4/BD3/BD4、F8D/T8D/F8DPLUS/M-F/M-T、P4T/P4F/PD3/PD4。

**关于"必须 PCIe 3.0 x16 直通"可以放宽**：双卡 TP 的本质瓶颈是 all-reduce 带宽，x8/x8 的 PCIe 4.0/5.0 对 27B 这种量级已经够用。关键不是非得 x16，而是两条槽都接 CPU、能拆开。

## 三、最容易被漏掉的一个：ACS

ReBAR 开着却仍不走 P2P 的高频原因，是 **ACS（Access Control Services）没关**。ACS 本是给带 switch/桥的拓扑做设备隔离用的，默认会拦"不经过根复合体的对等访问"——也就是 GPU 之间的 P2P DMA。哪怕两卡在同一 root complex、BIOS 也开了 Above 4G + ReBAR，只要路径上有个默认开 ACS 的桥端口，`hipDeviceCanAccessPeer` 仍可能返回 0，P2P 就退回 host-staged（走内存中转）。

定位与处理：

- 别只信 BIOS 选项，先实测：`rocm-smi --showtopo`（看两卡 weight/hops，同 root complex 应为 1 跳），跑一段 `hipDeviceCanAccessPeer`，或用 `RCCL_DEBUG=INFO` 看 all-reduce 走的是 P2P 还是 SHM
- `lspci -vvv` 找路径上的 bridge，看 ACSCap / ACSCtl——ACSCtl 里出现 SrcValid 之类就是它在挡
- BIOS 里找 ACS Enable / Access Control Services，找到就关；没选项时 Linux 侧常用 `pci=acs_override`（或按 PCI 地址用 setpci / 内核补丁改 ACS Control 位）
- 注意：如果两卡各自直连 CPU 的两个 root port、中间没有桥，ACS 根本不参与，关不关都一样，别白折腾

关 ACS = 拿设备间隔离换 P2P 性能，**本机自用 / 可信环境再关**；有其它租户或多用户就别关。

## 四、老平台的真实风险：不是算力，是"老化"

以 X99（2014 年的 Haswell/Broadwell-EP + C612）为例，今天最大的风险不是性能够不够，而是**主板供电与 PCB 老化**、二手板/延长线的接触问题：

- **掉卡常见原因**（多为链路/供电，不是 CPU 老）：金手指/插槽氧化（重插、擦金手指）、延长线/riser 信号完整性（先直插对比）、电源老化（12V 纹波变大、多卡瞬态触发 OCP，换新电源、每卡独立供电线）
- **真正不可逆的是主板 VRM 老化**：电解电容 ESR 上升，供电相数少的板长期高负载更容易出问题

## 五、落地前两条自查

1. **先确认收益场景**：单请求单卡跑 = switch 白花钱；收益只在多卡 TP/PP、且通信卡在主机中转时才兑现
2. **装完先验证再调**：`rccl-tests` + `NCCL_DEBUG=INFO` 确认走的是 P2P 还是 SHM，别跳过这步就以为"上 switch 就该更快"

核心原则：**多卡 TP 拼的是卡间通信链路，不是单卡算力**。先把"两卡能不能互相看见 + 走的是 P2P 还是 SHM"这两件事验证清楚，再谈调优。


---
来源：https://laobanclaw.top/articles/dual-r9700-p2p-multi-gpu-tp-guide/（AI 军火库）
