ISSUE-020: G5 实现 SG2262 CDMA msg 指令体系(CDMA_msg_send / msg_wait / remote_msgsend + msg_central)
发现日期:2026-05-13 状态:Phase 1 已修复(2026-05-13,v2.8.22 待打 tag) 类型:新功能(spec 级新增概念) 关联:ISSUE-019(基础设施已提供,主修复路径,已归档)
背景
ISSUE-019 调研 Ring AR/AG/RS 虚假 pipeline 问题,发现 G5 当前完全没建模 SG2262 CDMA 的 msg 指令体系,导致无法精确表达 Ring 算法所需的跨 step 数据到达依赖。
SG2262 真实硬件提供独立的 msg 指令同步机制(与数据传输解耦),是实现 Ring AR 类集合通信正确同步的硬件原生路径。
业界对照:
- InfiniBand:RDMA WRITE + RDMA WRITE_WITH_IMM 或 SEND(同步信号独立)
- NVLink:multimem.acquire(GPU cache-coherent shared memory,特例不通用)
- SG2262 PAXI:CDMA_write + CDMA_remote_msgsend + msg_central(与 IB 同构)
SG2262 硬件 spec 依据
2262 CDMA spec v2.2.docx 完整指令体系:
CDMA_msg_send / CDMA_msg_wait (L430-438)
- 用途:"用于 Engine 间的同步"
- 字段:msg_id (11 bit), send_cnt (7 bit), wait_cnt (7 bit)
- 公式:absolute_msg_id = msg_id_offset + relative_msg_id
- 行为:等前序所有指令执行完后执行
CDMA_remote_msgsend (L398-408)
- 用途:跨芯片 msg 分发,向 pe_num 个芯片的 message_center 发 msg_id
- 字段:
- start_pe (16b):起始目标 chip ID
- pe_step (16b):下一 chip 步长
- pe_num (16b):目标 chip 数量 (最多 1024)
- msg_id (16b):绝对 Message ID
- wait_cnt (16b)
msg_central 体系(L37, L88)
- CDMA 通过 A4S 接口与 msg_central 通信
- CDMA 支持向 4 个 message_central 发共 1024 个 message_id(每 central 256 msg_id)
- msg 含
message_id + cnt,msg_central 协调 - L37: "CDMA 内部分为 sendq 和 rcvq 两个线程,每个线程都可以发送 sys_send 和 sys_wait 指令,sys_send 和 sys_wait 指令用于和 msg_central 进行交互"
硬件数据 + msg 时序(L394-L396)
"写完数据后再触发发送 message 的操作(在将 message_center 的地址列入保序窗口的前提下)"
SG2262 设计明确:数据传输 + msg 通知通过保序窗口实现 "write 后 msgsend" 序列。
SG2262 Ring AllReduce 硬件实现序列
Step k chip[i]:
CDMA_write data → chip[(i+1)%N] // 数据传输(CHS Transfer 等价)
CDMA_remote_msgsend msg_id=K → chip[(i+1)%N] // msg 信号到对端 msg_central
Step k+1 chip[i]:
CDMA_msg_wait msg_id=K-1, wait_cnt=1 // 等 chip[(i-1+N)%N] 的 Step k msg
CDMA_write data → chip[(i+1)%N]
CDMA_remote_msgsend msg_id=K → chip[(i+1)%N]
...
G5 实施范围(待 plan)
Spec 修订
| spec | 新增内容 |
|---|---|
G5-CDMA建模设计规格.md G4 / G6 | 新增 §msg 指令体系(MsgSend / MsgWait / RemoteMsgSend)+ msg_central 状态机 + 事件触发链 |
互联通信G5仿真建模设计规格.md §集合通信展开 | Ring 算法用 msg 序列表达跨 step 同步(替代 cross-chip dep 隐式机制) |
G5 实现
| 模块 | 改动 |
|---|---|
perfmodel/evaluation/g5/src/types.rs | CDMAOpType 新增 MsgSend / MsgWait / RemoteMsgSend 变体;CDMACommand 加 msg 相关字段(msg_id, wait_cnt, target_pe 范围) |
新建 perfmodel/evaluation/g5/src/tier3/msg_central.rs | chip 级 msg_central 状态机:4 central × 256 msg_id slot,按 (central_idx, msg_id) → 累计 send_cnt |
perfmodel/evaluation/g5/src/tier6/cdma.rs | sendq/rcvq 处理 msg 指令;msg_wait 阻塞条件(msg_central 累计达 wait_cnt);ISSUE-019 留下的 cmd_id_dep_remote 基础设施在此复用为 msg_wait 实现 |
perfmodel/evaluation/g5/src/top/event_handlers.rs | 新增 MsgArrived 事件处理:触发 msg_central 累计 + 唤醒等待 thread |
perfmodel/evaluation/g5/src/collective/helpers.rs expand_ring_steps | 每 Step 产 (Transfer, MsgSend) 对;下 Step 前插 MsgWait |
验证
Phase 1 实测结果 (2026-05-13)
cargo test: 219 PASS + 4 ignored (num_chunks>1 暂不支持) — 包含 9 个新增测试:
- 5 in
tier6/cdma.rs: msg_central 累加/消费、MsgWait 阻塞、MsgSend 立即完成、MsgSend+MsgWait 跨 thread 解锁 - 4 in
collective/allreduce.rs: Ring AR N=2/N=4 msg pair 注入、multi-channel central_idx 隔离、2-port CW/CCW msg_id MSB 隔离
反馈环 (scripts/verify_msg_invariant.py,|AR-(AG+RS)|/(AG+RS) 不变量):
| 场景 | 用例数 | strict <3% PASS | soft <6% PASS |
|---|---|---|---|
| C=1 单 channel (N=2/4/8, M=0.4375/1.0/1.125 MB) | 9 | 8 | 9 |
| C=2/4 multi-channel (N=4/8, M=1.0/4.0 MB) | 8 | 6 | 8 |
| 合计 | 17 | 14 | 17 |
修复前 baseline AR < 2·AG (虚假 pipeline, ratio 25%+). 修复后 14/17 主流场景 <3%, 3 边界 (小消息 N=2 + multi-channel C=4 M=1MB) <6%,不变量物理上成立。
Phase 1 已知限制
num_chunks > 1暂不支持 (msg_id 命名空间未为 chunk 维度预留 bit,已 assert + 2 个测试标 ignore)multi-channel C > 4不支持 (4 个 msg_central 物理上限,已 assert). 影响:SG2262 默认 yaml (dies_per_chip=2 × cdmas_per_die=4 = C=8) 当前会 panic.smoke_tps186_baseline.py临时需要降级到 dies_per_chip=1 (C=4) 才能跑。total_steps >= 32768不支持 (msg_id 15-bit 容量,实际 N=1024 Ring 才 2046 step,远未触发)
修复前后数值对比
反馈环 N=2 M=0.4375MB C=1:
- 修复后:AR=7.596us, AG=3.950us, RS=3.950us → AR/AG = 1.92× (≈ 2×,物理自洽)
- 修复前 (ISSUE-019 状态):AR < 2·AG (虚假 pipeline, ratio 偏差 25%+)
N=32 CLOS AllReduce (test_clos_allreduce_32_chips):
- 修复后:sim_time=58776 ns vs ideal 20316 ns → ratio = 2.89× ideal
- 修复前 (plan §问题描述):ratio = 66.7× ideal (unbounded queue buildup)
- 远超 plan §Phase 1 预期 (<10× ideal)
Phase 2 后续工作
- num_chunks > 1 支持:扩展 msg_id 命名空间为 chunk 维度
- multi-channel C > 4:用 msg_id 高位编码 channel 而非 central_idx
- atomic / 其他 msg 应用场景
- RemoteMsgSend pe_num > 1 (范围群发)
- 反馈环 3 个边界 case 优化 (multi-channel 协调开销)
工作量评估
中-大规模 (5-8 Task):
- 1 spec 修订(G5-CDMA G4/G6 新增 msg 指令章节,互联通信G5仿真建模设计规格 集合通信展开层修订)
- 1 数据结构(CDMAOpType + msg 字段 + msg_central state)
- 1 事件流(MsgArrived + msg_central 更新 + thread wakeup)
- 1 expand 层重写(Ring 算法 msg 序列展开)
- 1 单元测试 + 反馈环 + 集成验证
- 1 baseline 数据刷新
需要走完整 iforge-discuss → iforge-spec → iforge-plan → iforge-act 流程。
ISSUE-019 留下的基础设施可复用
CDMACommand.cmd_id_dep_remote字段 → msg_wait 等待条件可复用此字段CDMAUnit.received_remote_cmds→ 可改造为 msg_central state(或保留作 msg_wait local cache)CDMAUnit.mark_remote_cmd_doneAPI → msg arrival 时 broadcast 写入CDMAUnit.thread_dep_satisfiedhelper +select_ready_thread预计算Vec<bool>→ msg_wait 阻塞解除时复用
ISSUE-020 实现时不需要重做这部分,直接复用 ISSUE-019 留下的 Task 0-3 基础设施。
优先级
中等。当前 G5 虚假 pipeline 行为(ISSUE-019 §问题现象)仍存在,但工程上影响有限:
- N=2 baseline 数据偏快 25%
- 多模型 deployment analysis 受影响(绝对值偏快)
修复后预期 baseline AR ≈ 2·AG 自洽,G5/Math 偏差收敛到合理范围。
可在 ISSUE-018(hash ITLV)+ ISSUE-019(基础设施)之后排程。