跳到主要内容

互联通信G5仿真建模设计规格

版本:1.6.0 状态:Draft 创建日期:2026-03-31 最后更新:2026-06-10 作者:xiang.li

变更历史

版本日期变更说明
1.6.02026-06-10新增 §分层算法跨维度同步:跨维 barrier 必须用 chip 级原语,废止"最后一条指令建依赖"表述(cmd_id_dep 为 thread 级语义无法表达跨维串行)
1.5.02026-06-01合规化:名词节改为名词定义并转表,统一 H2 名词短语句式,更新 msg 体系引用指向独立子 spec
1.4.22026-05-13修订 §Ring 跨 step 数据依赖,改用显式 msg 指令实现跨 step 数据到达依赖
1.4.12026-05-13修正 Ring 类算法依赖模式描述,新增 §Ring 跨 step 数据依赖
1.4.02026-05-12统一名词 Frame / Packet 粒度,名词定义新增 Frame 条目
1.2.02026-04-08补充 Switch 建模、InterconnectTopology 路由数据来源、端到端示例时序图
1.1.02026-04-07补充 RC Link 传输层、PAXICore 事务层
1.0.02026-03-31初版:通信栈架构、CDMA 建模、集合通信展开、事件定义、验收标准

@tbl-spec-g5comm-01 文档变更历史


背景与目标

背景

数学模型(Alpha-Beta)以闭式公式计算集合通信延迟,适用于快速参数扫描,但无法建模链路排队争用、流控背压、多线程仲裁等硬件行为。本 spec 定义包级事件驱动通信仿真的设计——以 CDMACommand 为基本仿真单位,经 PAXI 事务层分段、RC Link 传输层打包后在 C2C 物理链路上逐跳传输。与数学模型互补:数学模型用于设计空间探索,包级仿真用于精确瓶颈分析和硬件验证。

目标

  1. 事件驱动仿真完整 Tier 6 通信栈:PAXICore → RC Link TX/RX → InterconnectTopology → Switch(可选)
  2. CDMA 多线程仲裁建模(RR 仲裁、Outstanding 流控、tcredit 握手)
  3. 集合通信算法展开为 CDMACommand 序列
  4. RC Link 完整协议建模:Slot 状态机、PSN 序列号、CBFC credit 流控、Go-Back-N 重传
  5. 支持 chip + switch 混合拓扑,路由由外部 Dijkstra 预计算
  6. 可选 Switch 模型(VOQ + iSLIP + Dynamic Threshold + ECN)

不涉及范围

  • Tier 3 核级计算模块(TIU/DMA/SDMA/HAU)
  • Tier 4 NoC 完整 flit 级仿真(当前简化为 BusModel)
  • Tier 5 D2D 互联建模(已在 BusModel 作为透明延迟叠加层实现)

名词定义

名词定义
CDMACommand跨芯片 DMA 指令,包级仿真的基本单位
PAXIProtocol of Accelerated eXchange Interconnect,芯片间互联协议的总称(含事务层 + 传输层)
PAXICorePAXI 事务层模块名,管理 W/R OST 和 MPS 分段。注:PAXI 指协议,PAXICore 指仿真中的事务层模块
RC LinkReliable Connection Link,PAXI 的传输层,提供可靠传输、CBFC 流控
SlotRC Link TX 的发送缓冲槽位,三态:Empty → WaitGrant → WaitAck
PSNPacket Sequence Number,12-bit 包序列号,per-(dst, QP_ID) 独立
QPQueue Pair,RC Link 通信端点
VCVirtual Channel,5 个有效通道:Bank0–3 + MUL
CBFCCredit-Based Flow Control,per-(dst, VC_ID) 的 credit 流控
OSTOutstanding Transaction,在途事务数上限
MPSMaximum Payload Size,事务层单次 burst 最大 4096B
FramePAXICore↔RCLink 接口的最小事件粒度,对应 PAXI UserGuide §2.1.1 的一个 AXI burst 一个 frame;frame 字节数上限 = MPS;frame 完成事件触发 PAXI 事务层 ACK
PacketRC Link 内部传输单元(≤ max_payload,默认 1344B),仅用于 Go-Back-N 重传和 PSN 单调追踪;packet 级 ACK 不暴露给 PAXICore
VOQVirtual Output Queuing,交换机中消除 HOL 阻塞的队列结构
iSLIP交换机调度算法,多轮 Request-Grant-Accept
tcreditP2P 握手信号,RECEIVE 端发给 SEND 端确认就绪
write_doneSEND 端写完成后发给 RECEIVE 端的通知
FACKFast ACK,零字节包绕过 ACK MERGE 立即确认

@tbl-spec-g5comm-02 名词定义


通信栈架构

分层总览

通信栈自上而下分为集合通信展开、CDMA、PAXICore、RC Link、InterconnectTopology 和 Switch 六层:

图 1: 通信栈六层分层架构

模块职责

模块职责输入输出
集合通信展开将 AllReduce/P2P 等原语拆为每芯片的 CDMACommand 列表CommOpCDMACommand 序列
CDMA多线程指令调度,决定何时提交到 PAXICDMACommand提交请求 (dst, data_bytes, context)
PAXICore事务级管理,将大传输按 MPS 分段,追踪完成状态提交请求分段后的包列表(内部传递给 RC Link TX)
RC Link TX为每个包分配 Slot/PSN,VC 仲裁后打包发送包列表打包完成事件 (RcPackDone)
RC Link RXPSN 校验,ACK 汇聚,CBFC credit 返还收到的包ACK/NAK + CreditReturn
InterconnectTopology物理链路传输,序列化延迟 + 排队争用 + 传播延迟wire_bytes + 路由到达下一跳的时间
Switch交换机转发,VOQ 入队 + iSLIP 调度 + 出口序列化入口帧出口帧

@tbl-spec-g5comm-03 模块职责:模块,职责


端到端示例

以 Chip 0 向 Chip 1 发送 8192B Transfer(经 Switch)为例,展示包从发起到确认的完整流程。

时序图

图 2: 单次 Transfer 端到端时序

关键时间点

阶段延迟来源典型值 (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_NSdatapath 带宽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
MPSMaximum Payload Size4096B
MAX_PAYLOADRC Link 最大包负载1344B

@tbl-spec-g5comm-06 PAXICore 事务层建模 参数


详细设计见 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_OSTSlot 池大小512
HEADER_OVERHEAD每包头部50B
CREDIT_SIZECBFC 信用粒度256B
MAX_RETRYGo-Back-N 最大重传次数15
MERGE_DEPTHACK MERGE 深度64
POLL_CYCLE_NSACK MERGE 轮询周期4.0

@tbl-spec-g5comm-07 RC Link 传输层建模 参数


InterconnectTopology 互联拓扑建模

物理链路延迟模型

每条链路(单向)维护 busy_until_ns 时间戳,建模序列化延迟和 FIFO 排队争用:

$$\begin{equation} T = T_{\text{wait}} + T_{\text{serial}} + T_{\text{prop}} \label{eq:g5-link-delay} \end{equation}$$
分量公式含义
$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

逐跳转发逻辑

包在网络中逐跳传输,每到达一个节点根据类型决定下一步行为:

图 3: 逐跳转发节点分派逻辑

路由查找:给定 (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
ALPHADT 系数2.0
ECN_KMIN / ECN_KMAXECN 阈值0.5 / 0.8
ISLIP_ITERATIONSiSLIP 迭代轮数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 分段按维度分组跨维度串行(前一维度全部完成后才进入下一维度)
P2P12Send + 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 路由匹配。


接口定义

事件类型

事件携带数据触发行为
CdmaWakechip_id触发 CDMA try_arbitrate()
RcPackDonechip_id, slot_idx, dst, wire_bytes, qp_id包打包完成,提交到 InterconnectTopology
C2CLinkDonesrc_chip, arrived_at_node, final_dst, slot/psn/txn/vc/ecn物理传输完成,按节点类型分派
SwitchTickswitch_idSwitch 执行 iSLIP 调度
AckMergePollchip_id, src_chip, qp_idRX 端 ACK 汇聚轮询
AckArrivedchip_id, from_chip, ack_psn, is_nak, qp_idACK/NAK 到达 TX 端
CreditReturnchip_id, from_chip, vc_id, countCBFC credit 返还
RcLinkWakechip_idRC Link TX 仲裁唤醒
DataArrivedsrc/dst_chip, cmd_id, threads, op_type, data_bytes事务完成通知 CDMA
TcreditArrivedchip_id, from_chip, from_threadtcredit 到达
RetryTimeoutchip_id, dst, qp_idGo-Back-N 重传超时
CnpReceivedchip_id, from_chip, qp_id拥塞通知(预留)

@tbl-spec-g5comm-11 事件类型:事件,携带数据

仿真组装流程

仿真器初始化按以下步骤依次组装各层组件:

图 4: 仿真器初始化组装流程

验收标准

精度目标

场景消息范围目标 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=46 步串行,总指令 24 条
P2P 包级全链路tcredit → Send → ACK → DataArrived
CBFC credit 耗尽Slot 阻塞等待 CreditReturn
Go-Back-NNAK → 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_routing Dijkstra 预计算后传入仿真。
  • [2026-04-08] DCQCN 调速已完整实现(ECN RED + CNP + 速率状态机),详见 RC Link spec
  • [2026-04-07] 初始 CBFC credit 硬编码为 1024。
  • [2026-04-21] 各模块详细设计拆分为独立子 spec:CDMAPAXICoreRC LinkSwitch