跳到主要内容

09 - C2C 建模方案与实现规划

本文档规划 SG2262 C2C 子系统在 Tier6+Model 中的建模策略、实现分期和当前状态。

Spec 参考: docs/design/2262-C2C/ (硬件行为参考)

分析日期: 2026-04-15


现有建模能力

Math 模型 (已有)

通过 alpha-beta 公式计算通信延迟,无微架构细节:

latency = alpha + beta * message_size
# alpha = base_latency (c2c_latency_us)
# beta = 1 / bandwidth (c2c_bandwidth_gbps)

参数来源: topology YAML 的 interconnect.c2c.bandwidth_gbps / latency_us

能力边界: 无法区分 L1 拓扑差异、CDMA 瓶颈、保序开销、Send/Receive 握手延迟。

G5 仿真器 (Rust 实现)

Rust crate g5_rs, 位于 perfmodel/evaluation/g5/

已实现模块:

src/
├── tier6/
│ ├── cdma.rs # CDMA 引擎 (跨芯片 DMA)
│ ├── paxi_core.rs # PAXI 事务管理
│ ├── rc_link_tx.rs # RC Link 发送端
│ ├── rc_link_rx.rs # RC Link 接收端
│ ├── c2c_network.rs # C2C 网络 (链路延迟/带宽)
│ ├── switch.rs # 交换机模型
│ └── paxi.rs # PAXIBridge 组合
├── collective/
│ ├── allreduce.rs # Ring/BiDir/Tree AllReduce
│ └── ... # AllGather/ReduceScatter/AllToAll/P2P
├── top/
│ ├── multi_chip.rs # 多芯片仿真顶层
│ └── event_handlers.rs # 事件分发
└── kernel/
└── sim_kernel.rs # 事件驱动内核

SG2262 C2C vs 现有模型差距

维度SG2262 硬件行为Math 模型G5 仿真器
CDMA 引擎4/die, 8 thread, arbiter 仲裁共享 datapath已实现 (简化: 无 thread 仲裁)
C2C Link8 组 x4, MAC/SerDes 延迟, 1.5KB MTUbandwidth_gbps 参数已实现 (PAXIBridge + RC Link)
CLE 路由chipid->portid, L1/L2 两层, itlv层次位置判断已实现 (RoutingTable)
保序CHS 窗口 / CFS fence未实现 (当前等同 CFS 行为)
Send/Receivetcredit 握手, write_done 同步简单 P2P未实现 (用 transfer 替代)
In-network Reduceadd/max/min @ fp32/fp16/bf16network_efficiency 系数未实现
路径唯一不支持 ECMP, 严格保序无路径概念已实现 (路由表)
报文分片4KB AXI boundary + 1.5KB MTU已实现 (MPS 分段)

已知精度问题

问题: Ring AllReduce 仿真 RMSPE 63.4% (对比 H200 NVLink4 实测数据)

根因: 当前 G5 实现中,Ring AllReduce 每步 transfer 依赖前一步的 DataArrived(远端 ACK roundtrip),等同 CFS non-post write 语义。但 CHS (基线方案) 下 transfer bresp = local MAC early resp,延迟仅几 ns。

影响: 8-chip Ring AllReduce 14 步,每步多出一个链路 RTT (~200ns),累积额外延迟 ~2800ns。


建模方案

CHS/CFS 内存一致性模式

G5 应支持 CHS/CFS 模式切换,作为 CDMA 或 MultiChipSim 的配置参数:

enum MemoryConsistencyMode {
CHS, // post write, early resp, 快速释放
CFS, // non-post write, 等远端 bresp
}

CHS 模式 (默认):

  • transfer 完成 = 数据发送完毕 + early_resp_latency (~几 ns)
  • datapath 快速释放,下一条 transfer 可立即开始
  • Ring AllReduce step 间无 RTT gap

CFS 模式:

  • transfer 完成 = DataArrived (远端 ACK roundtrip)
  • datapath 被占用直到远端 bresp 返回
  • 当前 G5 的行为

Phase 分期

Phase 1: 行为级建模 [已完成]

模块状态说明
CDMAUnit已完成带宽约束 + 启动延迟 + 多线程 outstanding
PAXIBridge已完成OST 限制 + MPS 分段 + CBFC credit 流控
RC Link TX/RX已完成PSN + Go-Back-N 重传 + VC 仲裁
SwitchModel已完成VOQ + iSLIP 调度 + ECN RED 标记
C2CNetwork已完成链路延迟/带宽建模
MultiChipSim已完成多芯片仿真顶层
CollectiveOps已完成Ring/BiDir/Tree AllReduce 等

Phase 2: 精度提升 [进行中]

模块状态预期影响
CHS/CFS 模式切换待实现Ring AllReduce RMSPE 63% -> <20% (预期)
CDMA Thread Arbiter 精确仲裁未开始高负载时带宽下降 5-15%
Send/Receive tcredit 精确建模未开始P2P 场景小消息延迟敏感
PAXI CBFC/PFC 参数精调未开始拥塞场景下的背压行为

Phase 3: 完善补齐

模块状态预期影响
In-network AllReduce未开始AllReduce 延迟降低 ~50%
CLE itlv 策略未开始非均匀流量场景
PAXI TX buffer 精确水位/超时未开始突发流量场景的缓冲区溢出

建模参数对照表

SG2262 参数G5 仿真器对应Math 模型对应
C2C 总带宽 (112G)448 GB/sPAXIBridge.total_bw_gbpsc2c.bandwidth_gbps
C2C 有效带宽~431.9 GB/sPAXIBridge 报文封装效率(无)
C2C 直连延迟~150 ns (AXI-to-AXI)PAXIBridge 行为建模c2c.latency_us = 0.15
PAXI OST 上限512PAXIBridge.max_ost(无)
PAXI VC 数8PAXIBridge VC 仲裁(无)
PAXI CBFC credit可配 (32-2048B)PAXIBridge CBFC 流控(无)
MAC MTU1.5 KBC2CPhyLink.mtu_bytes(无)
AXI boundary4 KBCDMAUnit (MPS 分段)(无)
CDMA 数 / Die4CDMAUnit.cdma_count_per_die(无, 建议增加 BW 约束)
CDMA 单引擎带宽64 GB/sCDMAUnit.bandwidth_per_cdma_gbps(无, 建议增加 BW 约束)
Thread / CDMA8CDMAUnit.threads_per_cdma(无)
tcredit 深度32 / CDMA未建模p2p_overhead_ns
保序窗口32 区域未建模(无)
In-network Reduceadd/max/min未建模network_efficiency

带宽单位约定: bandwidth_per_cdma_gbps 的单位是 GB/s (= bytes/ns),不是 Gbits/s。整个项目中 *_gbps 后缀统一为 GB/s。


Math 模型增强建议

当前 Math 模型使用 alpha-beta 公式 (latency = alpha + beta * message_size),以下三个方向可在不引入事件驱动仿真的前提下提升精度。

CDMA 带宽约束

现状: Math 模型仅使用 c2c.bandwidth_gbps (C2C Link 带宽),未考虑 CDMA 引擎的带宽上限。

建议: 引入 CDMA 带宽作为上界约束:

effective_bw = min(c2c_link_bw, cdma_bw_per_die * num_dies)
  • 单 Die: effective_bw = min(448, 256 * 1) = 256 GB/s
  • 双 Die: effective_bw = min(448, 256 * 2) = 448 GB/s

L1 拓扑参数

现状: Math 模型无拓扑感知能力,所有芯片对使用相同带宽。

建议: 引入 L1 拓扑描述参数,根据拓扑类型调整有效带宽。

Send/Receive 开销

现状: P2P 通信延迟仅计算传输时间,未包含 tcredit 握手开销。

建议: 引入 Send/Receive 协议开销参数:

p2p_overhead_ns = 2 * c2c_latency_us * 1000  # tcredit RTT