跳到主要内容

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.rsCDMAOpType 新增 MsgSend / MsgWait / RemoteMsgSend 变体;CDMACommand 加 msg 相关字段(msg_id, wait_cnt, target_pe 范围)
新建 perfmodel/evaluation/g5/src/tier3/msg_central.rschip 级 msg_central 状态机:4 central × 256 msg_id slot,按 (central_idx, msg_id) → 累计 send_cnt
perfmodel/evaluation/g5/src/tier6/cdma.rssendq/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% PASSsoft <6% PASS
C=1 单 channel (N=2/4/8, M=0.4375/1.0/1.125 MB)989
C=2/4 multi-channel (N=4/8, M=1.0/4.0 MB)868
合计171417

修复前 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_done API → msg arrival 时 broadcast 写入
  • CDMAUnit.thread_dep_satisfied helper + 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(基础设施)之后排程。