互联通信G5仿真建模设计规格
版本:1.6.0 状态:Draft 创建日期:2026-03-31 最后更新:2026-06-10 作者:xiang.li
变更历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 1.6.0 | 2026-06-10 | 新增 §分层算法跨维度同步:跨维 barrier 必须用 chip 级原语,废止"最后一条指令建依赖"表述(cmd_id_dep 为 thread 级语义无法表达跨维串行) |
| 1.5.0 | 2026-06-01 | 合规化:名词节改为名词定义并转表,统一 H2 名词短语句式,更新 msg 体系引用指向独立子 spec |
| 1.4.2 | 2026-05-13 | 修订 §Ring 跨 step 数据依赖,改用显式 msg 指令实现跨 step 数据到达依赖 |
| 1.4.1 | 2026-05-13 | 修正 Ring 类算法依赖模式描述,新增 §Ring 跨 step 数据依赖 |
| 1.4.0 | 2026-05-12 | 统一名词 Frame / Packet 粒度,名词定义新增 Frame 条目 |
| 1.2.0 | 2026-04-08 | 补充 Switch 建模、InterconnectTopology 路由数据来源、端到端示例时序图 |
| 1.1.0 | 2026-04-07 | 补充 RC Link 传输层、PAXICore 事务层 |
| 1.0.0 | 2026-03-31 | 初版:通信栈架构、CDMA 建模、集合通信展开、事件定义、验收标准 |
@tbl-spec-g5comm-01 文档变更历史
背景与目标
背景
数学模型(Alpha-Beta)以闭式公式计算集合通信延迟,适用于快速参数扫描,但无法建模链路排队争用、流控背压、多线程仲裁等硬件行为。本 spec 定义包级事件驱动通信仿真的设计——以 CDMACommand 为基本仿真单位,经 PAXI 事务层分段、RC Link 传输层打包后在 C2C 物理链路上逐跳传输。与数学模型互补:数学模型用于设计空间探索,包级仿真用于精确瓶颈分析和硬件验证。
目标
- 事件驱动仿真完整 Tier 6 通信栈:PAXICore → RC Link TX/RX → InterconnectTopology → Switch(可选)
- CDMA 多线程仲裁建模(RR 仲裁、Outstanding 流控、tcredit 握手)
- 集合通信算法展开为 CDMACommand 序列
- RC Link 完整协议建模:Slot 状态机、PSN 序列号、CBFC credit 流控、Go-Back-N 重传
- 支持 chip + switch 混合拓扑,路由由外部 Dijkstra 预计算
- 可选 Switch 模型(VOQ + iSLIP + Dynamic Threshold + ECN)
不涉及范围
- Tier 3 核级计算模块(TIU/DMA/SDMA/HAU)
- Tier 4 NoC 完整 flit 级仿真(当前简化为 BusModel)
- Tier 5 D2D 互联建模(已在 BusModel 作为透明延迟叠加层实现)
名词定义
| 名词 | 定义 |
|---|---|
| CDMACommand | 跨芯片 DMA 指令,包级仿真的基本单位 |
| PAXI | Protocol of Accelerated eXchange Interconnect,芯片间互联协议的总称(含事务层 + 传输层) |
| PAXICore | PAXI 事务层模块名,管理 W/R OST 和 MPS 分段。注:PAXI 指协议,PAXICore 指仿真中的事务层模块 |
| RC Link | Reliable Connection Link,PAXI 的传输层,提供可靠传输、CBFC 流控 |
| Slot | RC Link TX 的发送缓冲槽位,三态:Empty → WaitGrant → WaitAck |
| PSN | Packet Sequence Number,12-bit 包序列号,per-(dst, QP_ID) 独立 |
| QP | Queue Pair,RC Link 通信端点 |
| VC | Virtual Channel,5 个有效通道:Bank0–3 + MUL |
| CBFC | Credit-Based Flow Control,per-(dst, VC_ID) 的 credit 流控 |
| OST | Outstanding Transaction,在途事务数上限 |
| MPS | Maximum Payload Size,事务层单次 burst 最大 4096B |
| Frame | PAXICore↔RCLink 接口的最小事件粒度,对应 PAXI UserGuide §2.1.1 的一个 AXI burst 一个 frame;frame 字节数上限 = MPS;frame 完成事件触发 PAXI 事务层 ACK |
| Packet | RC Link 内部传输单元(≤ max_payload,默认 1344B),仅用于 Go-Back-N 重传和 PSN 单调追踪;packet 级 ACK 不暴露给 PAXICore |
| VOQ | Virtual Output Queuing,交换机中消除 HOL 阻塞的队列结构 |
| iSLIP | 交换机调度算法,多轮 Request-Grant-Accept |
| tcredit | P2P 握手信号,RECEIVE 端发给 SEND 端确认就绪 |
| write_done | SEND 端写完成后发给 RECEIVE 端的通知 |
| FACK | Fast ACK,零字节包绕过 ACK MERGE 立即确认 |
@tbl-spec-g5comm-02 名词定义
通信栈架构
分层总览
通信栈自上而下分为集合通信展开、CDMA、PAXICore、RC Link、InterconnectTopology 和 Switch 六层:
模块职责
| 模块 | 职责 | 输入 | 输出 |
|---|---|---|---|
| 集合通信展开 | 将 AllReduce/P2P 等原语拆为每芯片的 CDMACommand 列表 | CommOp | CDMACommand 序列 |
| CDMA | 多线程指令调度,决定何时提交到 PAXI | CDMACommand | 提交请求 (dst, data_bytes, context) |
| PAXICore | 事务级管理,将大传输按 MPS 分段,追踪完成状态 | 提交请求 | 分段后的包列表(内部传递给 RC Link TX) |
| RC Link TX | 为每个包分配 Slot/PSN,VC 仲裁后打包发送 | 包列表 | 打包完成事件 (RcPackDone) |
| RC Link RX | PSN 校验,ACK 汇聚,CBFC credit 返还 | 收到的包 | ACK/NAK + CreditReturn |
| InterconnectTopology | 物理链路传输,序列化延迟 + 排队争用 + 传播延迟 | wire_bytes + 路由 | 到达下一跳的时间 |
| Switch | 交换机转发,VOQ 入队 + iSLIP 调度 + 出口序列化 | 入口帧 | 出口帧 |
@tbl-spec-g5comm-03 模块职责:模块,职责
端到端示例
以 Chip 0 向 Chip 1 发送 8192B Transfer(经 Switch)为例,展示包从发起到确认的完整流程。
时序图
关键时间点
| 阶段 | 延迟来源 | 典型值 (8192B @ 448 GB/s) |
|---|---|---|
| CDMA startup | 指令启动固定开销 | 50 ns |
| PAXICore 分段 | 逻辑处理(不计入仿真时间) | 0 |
| RC Link TX 打包 | ceil(wire_bytes / 64) ns,单 LG 512-bit datapath @ 1GHz;N 个 LG 并行处理 N 个包 | ~22 ns / 包 |
| C2C 链路 (Chip→Switch) | wire_bytes / bandwidth + base_latency | ~3 ns + 150 ns / 包 |
| Switch 转发 | 转发延迟 + 出口序列化 | 30 ns + ~3 ns |
| C2C 链路 (Switch→Chip) | wire_bytes / bandwidth + base_latency | ~3 ns + 150 ns / 包 |
| RX ACK MERGE | 轮询周期 | 4 ns |
| ACK 反向传输 | 50B / bandwidth + base_latency (× 跳数) | ~150 ns × 2 跳 |
| CBFC credit 返还 | 固定延迟 | 1 ns |
@tbl-spec-g5comm-04 关键时间点:阶段,延迟来源
CDMA 建模
详细设计见 G5 CDMA 建模设计规格。
每个 Die 有 4 个 CDMAUnit,每个 CDMAUnit 含多个线程共享一个 datapath。CDMA 负责跨芯片 DMA 指令的多线程仲裁调度,支持 Transfer、Send、Receive、Fence 四种指令类型。
核心设计要点:
- CHS/CFS 内存一致性模型:CHS 模式下线程不等远端 ACK 即可继续(硬件四级保序链保证正确性),CFS 模式下必须等 DataArrived。CHS 为默认模式
- Send datapath 提前释放:Send 发完数据后释放 datapath 给其他线程,bresp 收集独立进行,避免长 RTT 阻塞 datapath
- Receive 不消耗 Outstanding:只增 pending,不增 outstanding,不会被 MAX_OUTSTANDING 上限阻塞
- tcredit 池化:
HashMap<(from_chip, from_thread), u32>计数器池,可积累多个 tcredit
| 参数 | 含义 | 默认值 |
|---|---|---|
| CDMA_COUNT_PER_DIE | 每 Die 的 CDMAUnit 数 | 4 |
| THREADS_PER_CDMA | 每 CDMAUnit 线程数 | 8 |
| MAX_OUTSTANDING | 共享 Outstanding 上限 | 16 |
| BANDWIDTH_BYTES_PER_NS | datapath 带宽 | 8.0 (64 GB/s) |
| STARTUP_LATENCY_NS | 指令启动延迟 | 50 |
@tbl-spec-g5comm-05 CDMA 建模 参数
PAXICore 事务层建模
详细设计见 G5 PAXICore 事务层设计规格。
PAXICore 管理 AXI 事务级 OST 和 MPS 分段。将大传输按 MPS (4096B) 拆分为 segment,再按 max_payload (1344B) 拆分为 RC Link 包。
核心设计要点:
- 两级背压架构:pending_queue(OST 满时排队)+ segment_queue(RC Link Slot 满时排队)。两级背压分别对应事务级和包级的资源瓶颈
- drain 级联:ACK → slot 释放 → segment_queue drain → OST 释放 → pending_queue drain
- 零字节事务:data_bytes=0(tcredit)强制生成 1 个 segment,绕过 MPS 公式
| 参数 | 含义 | 默认值 |
|---|---|---|
| W_OST_LIMIT | 写 OST 上限 | 256 |
| R_OST_LIMIT | 读 OST 上限 | 256 |
| MPS | Maximum Payload Size | 4096B |
| MAX_PAYLOAD | RC Link 最大包负载 | 1344B |
@tbl-spec-g5comm-06 PAXICore 事务层建模 参数
RC Link 传输层建模
详细设计见 G5 RC Link 传输层设计规格。
RC Link 分 TX 和 RX 两个独立部分,负责可靠传输、流控、拥塞控制和仲裁。
核心设计要点:
- TX:512 Slot 发送缓冲池(Empty → WaitGrant → WaitAck),12-bit PSN 序列号,5 VC 加权 RR 仲裁(流内 PSN 顺序保证),CBFC per-(dst, vc_id) credit 流控,Go-Back-N 重传(环形排序)
- RX:PSN 校验三种结果(接受/间隙/重复)均返还 credit,需求驱动 ACK MERGE 汇聚,FACK 零字节快速确认,ECN-CNP 聚合窗口
- DCQCN 拥塞控制:替换原有固定速率窗口(RateCtrl),完整闭环——Switch ECN RED 概率标记 → RX CNP 生成 → TX per-QP 速率状态机(乘性减 + 快速恢复 + 加性增)
- 物理链路双队列:REQ 和 RSP VC 独立序列化队列,ACK 不等数据包。CreditReturn 免序列化(MAC 层信号)
| 参数 | 含义 | 默认值 |
|---|---|---|
| TYPE1_OST | Slot 池大小 | 512 |
| HEADER_OVERHEAD | 每包头部 | 50B |
| CREDIT_SIZE | CBFC 信用粒度 | 256B |
| MAX_RETRY | Go-Back-N 最大重传次数 | 15 |
| MERGE_DEPTH | ACK MERGE 深度 | 64 |
| POLL_CYCLE_NS | ACK MERGE 轮询周期 | 4.0 |
@tbl-spec-g5comm-07 RC Link 传输层建模 参数
InterconnectTopology 互联拓扑建模
物理链路延迟模型
每条链路(单向)维护 busy_until_ns 时间戳,建模序列化延迟和 FIFO 排队争用:
| 分量 | 公式 | 含义 |
|---|---|---|
| $T_{\text{wait}}$ | $\max(0, \text{busy\_until} - \text{now})$ | 排队等待 |
| $T_{\text{serial}}$ | $\text{wire\_bytes} / \text{bandwidth}$ | 序列化(bandwidth 单位 bytes/ns) |
| $T_{\text{prop}}$ | base_latency_ns | 传播延迟 |
@tbl-spec-g5comm-08 物理链路延迟模型:分量,公式
路由数据来源
路由由 Python 侧 topo_routing 子包的 Dijkstra 算法预计算,以四类数据传入仿真:
- nodes:节点列表,每个节点标记类型(chip 或 switch)及属性(chip_id、端口数、转发延迟)
- edges:物理链路列表,含带宽 (GB/s) 和延迟 (μs),自动创建双向链路
- routes:每对 chip 间的预计算路径,以节点名列表表示(如
["c0", "sw0", "c1"]) - switch_configs:switch 的端口数和转发延迟,用于自动创建 SwitchModel
逐跳转发逻辑
包在网络中逐跳传输,每到达一个节点根据类型决定下一步行为:
路由查找:给定 (src_chip, dst_chip, current_node),从预计算路径中定位 current_node 的位置,返回路径中的下一个节点。
反向路径:ACK/NAK/CreditReturn 从 RX 端沿反向路由传回 TX 端,同样经过物理链路延迟。反向路由使用 (dst_chip, src_chip) 的预计算路径。
Switch 建模
详细设计见 G5 Switch 建模设计规格。
当拓扑图中存在 switch 节点时自动创建。Switch 使用 VOQ 缓冲结构(per-ingress-egress-priority)消除 HOL 阻塞,iSLIP 调度算法进行交叉开关仲裁。
核心设计要点:
- iSLIP 指针更新:只在第一轮迭代更新 grant/accept pointer(标准去同步化技术),后续轮不更新
- Dynamic Threshold 简化:$\text{allowed} = \alpha \cdot (B_{\text{capacity}} - B_{\text{used}})$,省略了 $N_{\text{active}}$ 除数,对 AllReduce 同步突发更宽松
- 优先级二值化:payload==0 → priority 3(控制消息),payload>0 → priority 2(数据),无 Low 优先级
- 出口序列化 overlap:forwarding_latency 不占用出口端口资源,与后续包序列化可重叠
- ECN 出队标记:在 tick() 出队时执行 RED 概率标记,使用出队前的全局缓冲利用率
| 参数 | 含义 | 默认值 |
|---|---|---|
| FORWARDING_LATENCY_NS | 转发延迟 | 30 |
| PORT_BANDWIDTH_GBPS | 端口带宽 | 400 |
| PORT_COUNT | 端口数 | 8 |
| BUFFER_CAPACITY_BYTES | 总缓冲 | 16 MB |
| ALPHA | DT 系数 | 2.0 |
| ECN_KMIN / ECN_KMAX | ECN 阈值 | 0.5 / 0.8 |
| ISLIP_ITERATIONS | iSLIP 迭代轮数 | 2 |
@tbl-spec-g5comm-09 Switch 建模 参数
集合通信展开
将高层通信原语展开为每芯片的 CDMACommand 序列。
算法总览
| 算法 | 步数 | 每步指令数 | 依赖模式 |
|---|---|---|---|
| Ring AllReduce | $2(N-1)$ | $N$ | 跨 step 含远端数据到达依赖(见"Ring 跨 step 数据依赖") |
| Ring AllGather | $N-1$ | $N$ | 同上 |
| Ring ReduceScatter | $N-1$ | $N$ | 同上 |
| Tree AllReduce | $2\log_2 N$ | $\leq N$ | 树状依赖(父子节点间含远端数据到达依赖) |
| Pairwise AllToAll | $N-1$ | $N$ | 同芯片串行(每步通信对不同,无跨 step 远端依赖) |
| 分层集合通信 | 按 tier 分段 | 按维度分组 | 跨维度串行(前一维度全部完成后才进入下一维度) |
| P2P | 1 | 2 | Send + Receive + tcredit |
@tbl-spec-g5comm-10 算法总览:算法,步数
指令生成规则
展开时为每条 CDMACommand 分配:
- thread_id:在每个芯片内按模块级计数器轮转(
counter % THREADS_PER_CDMA),使指令均匀分布到各线程 - 依赖关系:本地依赖通过 cmd_id_dep 表达;Ring 类算法的跨 step 依赖必须包含远端数据到达(见下方"Ring 跨 step 数据依赖"),不可仅靠同芯片自身命令链表达
- cmd_id:全局递增,展开函数维护计数器
分层算法跨维度同步
分层集合通信的"前一维度全部完成后才进入下一维度"按 chip 粒度约束:每个 chip 进入下一维度的所有依赖链头(无前驱的命令),必须等待该 chip 在前一维度的全部命令(含其远端数据到达等待)完成后方可下发。
约束来源与机制要求:
- cmd_id_dep 仅在同 thread 内可见,无法表达跨 thread 依赖;前后维度的命令可能落在不同 thread——跨维同步不可用"下一维首命令 cmd_id_dep 指向上一维末命令"表达
- 跨维 barrier 必须用 chip 级机制:每个 thread 各自完成本维命令后发布完成信号(msg 指令;thread 内可用 Fence 等 pending 清零后再发布),下一维所有链头在本 chip 等齐全部 thread 的完成信号后启动
- 退化场景:当本 chip 前后两维命令全部落在同一 thread 时,cmd_id_dep 链即可表达串行,无需 chip 级 barrier
- barrier 仅约束本 chip 命令序,跨 chip 数据到达仍由维内 msg 指令保障(见"Ring 跨 step 数据依赖");msg 命名空间隔离遵循 msg 同步子 spec §msg_id 命名空间分配规则
Ring 跨 step 数据依赖
Ring 类集合通信算法(AllReduce、AllGather、ReduceScatter)的跨 step 依赖不可简化为"每芯片自身命令串行"——展开层必须建模接收方对远端数据到达的等待。
契约:
- chip $i$ 在 Step $k+1$ 发出的指令,必须依赖 chip $i-1 \to $ chip $i$ 在 Step $k$ 的数据真正到达 chip $i$ 的 DataArrived 事件
- 该依赖不可由"chip $i$ 自身 Step $k$ 发送命令的本地完成"替代——本地 datapath 完成(如 CHS Transfer 的 CdmaLocalComplete)仅表示数据离开本芯片 datapath,不表示数据到达远端、也不表示远端→本地的对偶传输已完成
- 在 ReduceScatter 中,chip $i$ Step $k+1$ 发送的数据是 Step $k$ 接收 + reduce 后的结果;在 AllGather 中是 Step $k$ 接收到的远端数据。两者均要求远端数据到达 + 本地后处理完成后才能进入下一步发送
与单步原语的关系:N=2 Ring(AG/RS 单步、AR 两步)中,AG/RS 只有单步无跨 step 依赖,AR 两步间仍须遵循上述契约。
业界对照:NCCL prims_simple 通过远端 step counter 的 acquire load 实现接收端阻塞(receiver 主动观察 sender 完成),Demystifying NCCL paper (arxiv 2507.04786) 明确将 Ring 类归类为 non-pipelined pattern,跨 step 不可 overlap。Thakur 2005 MPICH 优化论文 (N-1) \cdot \alpha 系数为精确公式,反映此物理依赖。
实现机制(参考 G5 CDMA msg 同步指令体系设计规格):
Ring 类算法 expand 层使用显式 msg 指令实现跨 step 数据到达依赖,对应 SG2262 硬件 "CDMA_write + 显式 msg 指令" 同步路径:
Step k chip[i]:
Transfer/CDMA_write 数据 → chip[(i+1) % N]
RemoteMsgSend msg_id=K → chip[(i+1) % N] // 显式通知 receiver Step k 完成
Step k+1 chip[i]:
MsgWait msg_id=K-1, wait_cnt=1 // 等 chip[(i-1+N) % N] 的 Step k msg
Transfer/CDMA_write 数据 → chip[(i+1) % N]
RemoteMsgSend msg_id=K → chip[(i+1) % N]
...
保序约束("写完数据后再触发 msg")通过 expand 层在同 thread cmd 序列中将 RemoteMsgSend 的 cmd_id_dep 链接到前序 Transfer 的 cmd_id 实现,不依赖 PAXI 内部指令重排。
替代实现(如 Send/Receive 握手对 + write_done sideband 机制)对应 SG2262 另一条同步路径,由 expand 层根据算法语义选择;但简化方案(让 Transfer 自动触发对端同步)违反 SG2262 硬件约束(CDMA_write 不带自动同步机制,见 G5 CDMA msg 同步指令体系设计规格)。
实施范围(见 G5 CDMA msg 同步指令体系设计规格):
- Phase 1:使用 MsgSend + MsgWait 实现 Ring AR/AG/RS 跨 step dep(单点目标即可,pe_num = 1 退化场景)
- Phase 2:使用 RemoteMsgSend pe 范围群发覆盖 Broadcast / Multicast 算法
Ring 管线化
当 num_chunks > 1 时,每步拆为多个子传输。同 chunk 跨步串行(须满足上述跨 step 数据依赖契约),不同 chunk 可在不同线程上并行(chunk-level pipeline,与跨 step 数据依赖正交)。管线深度 = min(num_chunks, THREADS_PER_CDMA)。
P2P 展开
生成 Receive(目标芯片,零字节 tcredit)+ Send(源芯片,等 tcredit 后发数据)配对。remote_thread_id 互相指向对方,用于 tcredit/write_done 路由匹配。
接口定义
事件类型
| 事件 | 携带数据 | 触发行为 |
|---|---|---|
| CdmaWake | chip_id | 触发 CDMA try_arbitrate() |
| RcPackDone | chip_id, slot_idx, dst, wire_bytes, qp_id | 包打包完成,提交到 InterconnectTopology |
| C2CLinkDone | src_chip, arrived_at_node, final_dst, slot/psn/txn/vc/ecn | 物理传输完成,按节点类型分派 |
| SwitchTick | switch_id | Switch 执行 iSLIP 调度 |
| AckMergePoll | chip_id, src_chip, qp_id | RX 端 ACK 汇聚轮询 |
| AckArrived | chip_id, from_chip, ack_psn, is_nak, qp_id | ACK/NAK 到达 TX 端 |
| CreditReturn | chip_id, from_chip, vc_id, count | CBFC credit 返还 |
| RcLinkWake | chip_id | RC Link TX 仲裁唤醒 |
| DataArrived | src/dst_chip, cmd_id, threads, op_type, data_bytes | 事务完成通知 CDMA |
| TcreditArrived | chip_id, from_chip, from_thread | tcredit 到达 |
| RetryTimeout | chip_id, dst, qp_id | Go-Back-N 重传超时 |
| CnpReceived | chip_id, from_chip, qp_id | 拥塞通知(预留) |
@tbl-spec-g5comm-11 事件类型:事件,携带数据
仿真组装流程
仿真器初始化按以下步骤依次组装各层组件:
验收标准
精度目标
| 场景 | 消息范围 | 目标 RMSPE |
|---|---|---|
| 单层 8-GPU Ring AllReduce | > 64 MB | < 15% |
| 双层 16-GPU Ring AllReduce | > 64 MB | < 30%(ECN→CC 闭环前) |
| P2P Send/Recv | > 1 MB | < 10% |
@tbl-spec-g5comm-12 精度目标:场景,消息范围
功能验证
| 场景 | 预期行为 |
|---|---|
| Ring AllReduce N=4 | 6 步串行,总指令 24 条 |
| P2P 包级全链路 | tcredit → Send → ACK → DataArrived |
| CBFC credit 耗尽 | Slot 阻塞等待 CreditReturn |
| Go-Back-N | NAK → WaitAck → WaitGrant 回退 |
| Switch 多跳 | chip → switch → chip 正确转发 |
@tbl-spec-g5comm-13 功能验证:场景,预期行为
后续演进
| 方向 | 说明 |
|---|---|
| PFC 链路级流控 | 需要 Switch → Chip 反向 PAUSE 帧,已明确延后 |
| NVLS 算法 | NVSwitch 网内 AllReduce,步数从 2(N-1) 降到 2 |
| 动态集合通信选择 | 根据消息大小自动选择 Ring/Tree/NVLS |
@tbl-spec-g5comm-14 后续演进:方向,说明
实现说明
本节记录 spec 与实际实现的偏差。
- [2026-04-08] 仿真核心已用 Rust 实现,通过 PyO3 暴露接口。Python 侧仅保留适配层和路由预计算。
- [2026-04-08] 路由由 Python
topo_routingDijkstra 预计算后传入仿真。 - [2026-04-08] DCQCN 调速已完整实现(ECN RED + CNP + 速率状态机),详见 RC Link spec。
- [2026-04-07] 初始 CBFC credit 硬编码为 1024。
- [2026-04-21] 各模块详细设计拆分为独立子 spec:CDMA、PAXICore、RC Link、Switch。