跳到主要内容

G5 指令级仿真模块 Code Review 问题清单

审查时间: 2026-04-13 审查范围: perfmodel/evaluation/g5/ (Python 层 + Rust 后端) 总计: ~9,200 行 Rust + ~450 行 Python


一、违反 config-loading 规则(禁止默认值)

impl Default 块中的硬编码默认值

所有 impl Default 块应改为从配置文件加载,不允许硬编码默认值。

ID文件结构体硬编码参数数量关键参数
CL-01src/tier6/rc_link_tx.rs:41-56RcLinkTxConfig11retry_timeout_ns=50000, overcredit_limit=512
CL-02src/tier6/rc_link_rx.rs:25-36RcLinkRxConfig6merge_depth=64, poll_cycle_ns=4.0
CL-03src/tier6/rc_link_tx.rs:99-110DcqcnConfig6byte_threshold=150KB, timer_interval_ns=55000
CL-04src/tier6/switch.rs:40-55SwitchConfig10forwarding_latency_ns=30, buffer_capacity=16MB
CL-05src/tier6/paxi_core.rs:21-30PaxiCoreConfig4w_ost_limit=256, mps=4096, max_payload=1344

const 硬编码常量

ID文件常量名应来源
CL-06src/tier3/tiu.rs:15TIU_INIT_CYCLES44Chip config
CL-07src/top/multi_chip.rs:25INITIAL_CREDIT1024Protocol config
CL-08src/top/multi_chip.rs:26ACK_WIRE_BYTES50Protocol config
CL-09src/tier6/rc_link_tx.rs:16DATAPATH_BYTES64.0Chip config
CL-10src/tier6/rc_link_rx.rs:52CNP_INTERVAL_NS50000.0Protocol config
CL-11src/collective/*.rs (4 文件)DEFAULT_THREADS_PER_CDMA8Chip CDMA config
CL-12src/top/event_handlers.rs:288CNP wire bytes64Protocol config

静默默认值

ID文件位置问题
CL-13src/input.rs:173c2c_ports_per_chip缺失时静默默认为 1,应报错
CL-14src/input.rs:549parse_map_u32_u32缺失时静默返回空 HashMap

二、违反 code-style 规则(函数/文件长度与嵌套深度)

文件过长 (>300 行)

ID文件行数建议
CS-01src/tier6/rc_link_tx.rs901拆分 DCQCN/CBFC/Slot 为独立模块
CS-02src/input.rs696拆分为 chip/topology/program 子模块
CS-03src/collective/allreduce.rs652三种算法拆为独立文件
CS-04src/tier3/cdma.rs536
CS-05src/top/event_handlers.rs522

函数过长 (>50 行) — 前 5 严重

ID文件函数行数嵌套深度
CS-06src/top/multi_chip.rssimulate()1959
CS-07src/collective/allreduce.rsexpand_halving_doubling_allreduce()1675
CS-08src/top/single_chip.rssimulate()1326
CS-09src/tier3/cdma.rstry_arbitrate()1096
CS-10src/top/multi_chip.rsinit_components()927

三、违反 code-comments 规则(注释应以中文为主)

ID文件英文注释数中文注释数严重程度
CC-01src/tier3/tiu.rs113严重(几乎全英文)
CC-02src/tier6/rc_link_tx.rs5148混杂
CC-03src/collective/allreduce.rs3340混杂
CC-04src/input.rs2622英文偏多
CC-05src/tier6/paxi_core.rs2419英文偏多

四、错误处理问题(panic 代替 Result)

ID文件位置panic 原因建议
EH-01src/tier4/bus.rs:22-26NoC mesh 校验panic!("Mesh cannot hold cores")返回 Result,PyO3 边界转 PyErr
EH-02src/tier3/core_subsys.rs:66缺少 GDMA 配置unwrap_or_else(|| panic!(...))同上
EH-03src/kernel/sim_kernel.rs:99-101调度过去时间panic!同上
EH-04src/tier3/tiu.rs:41ch_per_cyc=0除零 panic前置校验
EH-05src/tier6/rc_link_tx.rs:283credit underflowdebug_assert!改为 assert! 或运行时检查

五、设计与正确性问题

event_handlers 字符串传递包上下文

ID文件问题
DE-01src/top/event_handlers.rs:130-176包元数据编码为 "src:dst:slot:psn:bytes:txn:qp:vc" 字符串,解析失败时静默 continue。应改用 PacketContext 结构体。

hierarchical.rs 空命令列表导致竞争条件

ID文件问题
DE-02src/collective/hierarchical.rs:42cmds 为空时存入 u32::MAX (NO_DEP),下一维度命令无依赖约束,可能导致执行顺序错乱。

Go-Back-N 粒度过粗

ID文件问题
DE-03src/tier6/rc_link_tx.rsNAK 触发时对该目标的所有 QP 执行 Go-Back-N,而非仅重传出错 QP。影响仿真精度。

DCQCN 未完整实现

ID文件问题
DE-04src/tier6/rc_link_tx.rsDCQCN 状态机框架已有,但速率限制未在 TX 路径实际执行(仅注释)。

AllReduce chunk 计算语义不清

ID文件问题
DE-05src/collective/allreduce.rs:18chunk_bytes = data_bytes / (N * num_chunks)num_chunks > 1 时语义不够清晰。

CDMA 与 SDMA 混淆统计

ID文件问题
DE-06adapter.py:94-96CDMA 记录被归入 sdma_duration_ns,C2C 通信和片内 SDMA 混为一体,应单独统计。

六、Python 层问题

ID文件问题
PY-01sim_engine.py:62-67simulate_multi_chipprogram, network_graph 参数缺少类型标注
PY-02pipeline.py:33-34docstring 标注 network_graph/routing_table "暂未使用",但 sim_engine 已在用,docstring 过时
PY-03adapter.py:107-112瓶颈判断:wait_ns < 0 (overlap 场景) 未单独处理

七、输入校验不足

ID文件问题
IV-01src/input.rs:294-299operand_addrs 无边界/对齐校验
IV-02src/input.rs:361-377Hierarchical dimension 的 group 结构无校验(空组、重复 core_id)
IV-03src/input_parse.rs枚举解析方式不一致(有的用 .getattr("name"),有的直接读字符串)

八、测试覆盖不足

ID问题
TC-01tests/g5/ 目录不存在,无专门 G5 测试套件
TC-02缺少 PyO3 序列化/反序列化 roundtrip 测试
TC-03缺少输入校验边界条件测试
TC-04缺少多芯片 PAXI 协议端到端测试
TC-05缺少集合通信算法正确性对比测试

修复状态

已修复 (2026-04-13)

  • P0: EH-01~05 — panic 改为 Result/自动修正 (bus.rs, core_subsys.rs, sim_kernel.rs, tiu.rs, rc_link_tx.rs)
  • P0: DE-01 — event_handlers 字符串上下文改为 PacketContext 结构体
  • P0: DE-02 — hierarchical.rs 空命令列表 bug 修复 (drain 前记录 max_id)
  • P0: CL-13 — c2c_ports_per_chip 缺失时报错而非静默默认
  • P0: CL-14 — 缺失 map 时添加日志提示
  • P1: CL-06 — TIU_INIT_CYCLES 改为从 ChipSpec.tiu_init_cycles 读取
  • P1: CL-07/08 — INITIAL_CREDIT/ACK_WIRE_BYTES 改为 MultiChipSim 实例参数
  • P2: PY-01 — sim_engine.py 添加类型标注
  • P2: PY-02 — pipeline.py docstring 更新
  • P2: PY-03 — adapter.py 瓶颈判断 overlap 场景修复
  • P2: DE-06 — CDMA 独立于 SDMA 统计
  • P3: CC-01~05 — 核心代码注释已中文化,协议术语保留英文

待修复

  • P1: CL-01~05 — PAXI/Switch/DCQCN impl Default 块参数化 (已标注 TODO)
  • P1: CL-09~12 — 其他 const 参数化 (DATAPATH_BYTES 等, 已标注 TODO)
  • P1: CL-11 — DEFAULT_THREADS_PER_CDMA 参数化 (已标注 TODO)
  • P2: CS-01~10 — 文件/函数过长问题 (需拆分重构)
  • P3: IV-01~03 — 输入校验补充
  • P4: DE-03~05 — Go-Back-N 粒度、DCQCN 完整实现、chunk 语义
  • P4: TC-01~05 — 测试覆盖补充