跳到主要内容

G5 落地示例

把 02-08 的概念落到 SystemC AT 实现——架构骨架、三资源域设计、与上层 DES 接口、MVP 路径

核心要点:

  • 四层模块层级:Chip → Die → Tile → Unit,AccTLMSim / NNSim 实证,后者 vs RTL 加速 3,000-13,000×
  • AT 4-phase 是边界协议:BEGIN_REQ → END_REQ → BEGIN_RESP → END_RESP(Accellera LRM verbatim)
  • 混合精度策略:compute 用 LT、NoC / HBM / chiplet 边界用 AT——AT 的杀手级用例不在 compute 域
  • DRAM 后端三选一:DRAMsim3 / Ramulator 2.0 / DRAMSys(SystemC-native,首选)
  • 与上层 DES 接口范本:AstraComputeAPI(get_static_runtime + simulate(...)),Chakra Node.duration_micros 作 trace
  • MVP 路径不要一上来全建:单 matmul → compute 闭环 → 加 memory → 加 interconnect,每步可验证

名词定义

名词定义
SC_MODULESystemC 模块基础单元
Generic PayloadTLM-2.0 标准事务对象,字段含 command / address / data / length / phase / response
AT 4-phaseBEGIN_REQ → END_REQ → BEGIN_RESP → END_RESP,Approximately-Timed 协议
Temporal decoupling让某模块在 quantum 时间内"领先"全局时间运行,减少 context switch
Quantum Keeper管理 temporal decoupling 中各模块本地时间与全局时间偏差的对象
nb_transport_fw/bw非阻塞 forward / backward 传输,AT 模式核心 API
tlm_extension<T>Generic Payload 的派生扩展,用于附加 LLM workload 字段

本篇范围

本篇是综合落地章——把 02-08 的概念用 SystemC AT 实现时的具体设计选择讲清楚。基于业界公开实证(NNSim / AccTLMSim / FLECSim-SoC / ASTRA-sim AstraComputeAPI / Chakra),不引用任何项目代码。

包含:

  • SystemC AT 架构骨架(模块层级、时钟域、混合精度策略)
  • 三资源域(compute / memory / interconnect)落地到 SystemC AT 的具体设计
  • 与上层算子级 DES 的接口与 feedback loop
  • MVP 路径与调试可观测性
  • 仿真速度优化

不包含:

  • 具体代码实现——本篇给设计选择,不给完整代码
  • 各资源域的概念性内容——已在 02 / 03 / 04 篇覆盖
  • 标定与验证方法论——见 08 篇

SystemC AT 架构骨架

模块层级

AccTLMSim[1]、NNSim[2]、FLECSim-SoC 一致呈现四层模块层级:

Chip
├── Die / Cluster
│ ├── Tile
│ │ ├── PEArray (compute 域)
│ │ ├── OnChipSRAM (memory 域,scratchpad)
│ │ └── DMAController (memory 域,搬数据)
│ ├── NoCRouter (interconnect 域)
│ └── MemController (memory 域,HBM 接口)

@tbl-ipm-g5-module-hierarchy 典型 cycle-approx perf model 的模块层级

NNSim 这种结构实测 vs RTL 加速 3,000-13,000×,是 SystemC AT 在 AI 芯片建模的工业精度区间。

时钟域管理

三个独立 sc_clock:

  • compute 时钟(PE 阵列)
  • NoC 时钟(片内互联)
  • HBM 时钟(内存控制器)

SystemC 调度器用单一事件队列统一管理这三个时钟,无需显式跨域同步——这是 SystemC LT 内部可安全跨域的根本原因。跨域 AT 事务通过 nb_transportsc_time& delay 参数注入各域延迟,gem5-SystemC 集成(SAMOS 2017)用 Gem5MasterTransactor 桥接模块处理 timing protocol 到 TLM 的映射。

混合 AT / LT 精度策略

关键判断:AT 的杀手级用例不在 compute 域(02 篇与 04 篇结论一致)。工程上常用混合精度:

精度模式理由
Compute(PE 内部)LT(b_transport + delay)计算单元内部不需要非阻塞事务流,无背压需求
NoC / 路由AT(nb_transport 4-phase)多 router 异步交互、credit 流控、背压传播
HBM / DRAM 控制器AT 4-phasebank conflict、refresh、队列调度需要事件级精度
Chiplet 边界(UCIe)AT 4-phase + back-pressureD2D 链路 stall 确定性传播

@tbl-ipm-g5-mixed-precision 混合 AT / LT 精度策略

AT 4-phase 的 verbatim 行为(Accellera LRM):BEGIN_REQ / BEGIN_RESP 端到端传播,END_REQ / END_RESP 仅 local hop 流控nb_transport_fw 签名:

tlm_sync_enum nb_transport_fw(tlm_generic_payload&, tlm_phase&, sc_time&);

返回值是 TLM_ACCEPTED / TLM_UPDATED / TLM_COMPLETED 三档。

Generic Payload 的 LLM 扩展

标准字段(command / address / data / length)以内存映射总线为语义,LLM workload 需通过 tlm_extension<T> 附加:

  • layer_id:transformer 层 ID
  • seq_len:当前 KV 长度
  • op_type:GEMM / GEMV / Attention / Softmax
  • flop_count:算子 FLOPs
  • compute_latency:解析模型给出的时长

IEEE 1666-2011 推荐用扩展而非继承 Generic Payload——这是 SystemC 社区共识,继承会破坏跨模块兼容。

Compute 域落地

PE 阵列 Module 设计

NNSim 的可 verify 参考:

  • PE 阵列作为 TLM-2.0 target,以 simple_target_socket 对外暴露
  • 内部 SC_THREAD 执行算子时长解析公式,不模拟逐 PE 逐 cycle
  • 在 socket 边界保持 cycle-accurate 时序,跳过模块内部 MAC array 实际计算

这是 cycle-approx 档"内部 analytical / 边界 cycle-accurate"的具体落实。

Tile 调度与启动税

SCALE-Sim 公式(Axon 论文 arXiv 2501.06043 verbatim 引用):

$$\begin{equation} \tau = 2S_R + S_C + T - 2 \label{eq:ipm-g5-scalesim-tau} \end{equation}$$

其中 $S_R \times S_C$ 是阵列维度,$T$ 是时域累加深度,$(2S_R + S_C - 2)$ 是 pipeline fill + drain 启动税。

SystemC AT 集成方式:在 b_transport() 或其调用函数中:

wait(τ * period / η)

其中 $\eta$ 是 02 篇的效率因子,作为构造参数静态注入——不进入 TLM payload 或相位逻辑。SCALE-Sim v3 的两遍法等价为 compute 延迟 + memory stall 分层叠加。

三种 stationary dataflow 的映射

SCALE-Sim 的 Output-Stationary / Weight-Stationary / Input-Stationary 三种 dataflow,在 SystemC AT 里只改 $S_R$$S_C$$T$ 的语义映射(GEMM 三维 M / N / K 哪一维归到空间轴),不改公式结构。

η 注入点

静态 η 作为 PE 模块构造参数注入,应用于 b_transport() 内的计时公式。动态 η(随负载变化)需要 memory 域回调,属于跨 facet 边界问题,工程上常退化为静态 η + 算子分桶。

AT 4-phase 在 compute 边界的并发

TLM-2.0 LRM §14 verbatim:每时最多一个 in-flight request 和一个 in-flight response,但两者可重叠——对应 systolic array fill / drain 流水。END_REQ 后 initiator 可发下一 BEGIN_REQ,实现多 tile in-flight。AT 相比 LT blocking transport 的优势正在此并发能力。

Memory 域落地

SRAM Scratchpad 设计

  • SC_MODULE + tlm_utils::simple_target_socket
  • b_transport 回调实现读写,timing delay 累加到 sc_time 参数
  • 多 bank 用地址高位 decode + 每 bank 独立 socket 表达多读写口
  • 容量约束在 AccTLMSim 框架中用于 loop tiling 验证

AI 加速器 scratchpad 与 GPU shared memory 的关键差异:前者软件显式 DMA 管理,无替换逻辑,不建 tag / valid / dirty——这是 03 Memory 篇结论的具体落实。

DMA 引擎两种模式

Descriptor-based:

  • sc_fifo<DmaDesc> + SC_THREAD
  • 每次从队列取 descriptor,用 b_transportnb_transport_fw 向 HBM 发 TLM transaction
  • 适合流式 prefetch 管线

Trigger-based:

  • sc_event 驱动
  • compute tile 完成后 notify() 触发搬运
  • 适合固定 dataflow

工程上两种常并存——descriptor 主路 + trigger 辅助同步。

HBM 控制器:三选一后端

cycle-approx 档的 DRAM 仿真不重造轮子,接成熟工具:

后端集成方式适用
DRAMsim3[3]MemorySystem(config, dir, read_cb, write_cb) + AddTransaction(addr, is_write) + ClockTick(),SystemC wrapper 以 sc_clock 驱动主流,gem5 集成成熟
Ramulator 2.0[4]libramulator.so + Factory::create_frontend() + receive_external_requests(type, addr, ctx_id, lambda) + Request::callback协议覆盖最广(DDR5 / LPDDR5 / HBM3 / GDDR6)
DRAMSys(Fraunhofer IESE)SystemC-native TLM-2.0 target,无需 wrapperSystemC-first 场景首选

@tbl-ipm-g5-dram-backends DRAM 控制器后端三选一

AT 4-phase Cache Fill

nb_transport_fw 返回 TLM_ACCEPTED(Type A target),timing 以 sc_time 注解传递,wait():

  1. BEGIN_REQ(fw):initiator 发请求
  2. END_REQ(bw):target 解除 req-lock,initiator 可发下一请求
  3. BEGIN_RESP(bw):数据就绪
  4. END_RESP(fw):initiator 消费完

DMA 作 TLM initiator,HBM Controller 作 TLM target,内部调 DRAM sim API。完成回调触发 nb_transport_bw(BEGIN_RESP)

背压与容量约束

背压实现:WillAcceptTransaction()receive_external_requests() 返回 false 时延迟 END_REQ,自然实现限速。DMA 完成后 sc_event.notify() 通知 compute tile,支持 double-buffer 流水。

容量约束:scratchpad / KV cache 容量在模块构造时静态指定,超出时:

  • 简单退化:报错退出(MVP 阶段够用)
  • 工程化:fallback 到 DRAM(模拟 spillover 延迟)

容量墙公式见 03 篇

Interconnect 域落地

NoC Router 4-stage Pipeline

NoC router 的标准 4-stage pipeline:RC(Route Compute)→ VA(VC Allocation)→ SA(Switch Allocation)→ ST(Switch Traversal)。SystemC AT 实现:

  • 每阶段映射为一个 SC_THREAD(不能 SC_METHOD——后者无法 suspend)
  • 通过 wait(time) 注入阶段延迟
  • VC buffer:sc_fifo<Flit> vc_buf[NUM_VC] + VC 状态机(IDLE / ROUTING / ACTIVE)

Credit-based flow control:

  • sc_signal<bool>sc_fifo<int> 实现 credit-return channel
  • SA stage 检查 credit_count[out_vc] > 0 才授权 flit
  • 下游出队时回传 credit
  • buffer depth 规则:≥ 链路往返延迟(RTT)

C2C 链路抽象

NVLink 类 C2C 链路(128-bit flit,1-18 flit/packet):

  • flit-level AT:每次 nb_transport_fw/bw 对应一个 flit,BEGIN_REQ 标注序列化延迟,credit 耗尽时保持 BEGIN_REQ 直到 credit-return 到达
  • message-level AT:成本更低但丢失 per-flit credit 停顿精度,仅当 credit pool >> max packet size 时可接受

工程取舍:对推理 perf model,message-level 通常够(decode 算子小、credit 不易满)。但跨 chiplet 与拥塞建模必须 flit-level。

集合通信原语

无专用 SystemC AT 集合通信后端。业界分层:

  • ASTRA-sim System layer 拆 ring-allreduce 为 (N-1) reduce-scatter + (N-1) allgather 步,每步 chunk 传输是一次 send 调用
  • SystemC AT 仅负责该 send 的物理链路 timing
  • ASTRA-sim 2.0 引入 Chakra Execution Trace(send / recv 节点依赖图),算法规格与仿真引擎解耦

这意味着 G5 的 SystemC AT 不需要重新实现集合通信算法,只需提供单次 send / recv 的精确 timing,算法层交给 ASTRA-sim 或类似工具。

Chiplet 边界(UCIe FDI)

UCIe 1.1 FDI 接口的四信号握手:

  • valid / bits / ready / irdy
  • Stall back-pressure 确定性 1-cycle 传播:plStallReq → 1 拍 → lpStallAck
  • D2D adapter 层 credit 在初始化参数协商时交换,无 credit 禁止发送

SystemC AT 映射:FDI flit 传输 = 一次 nb_transport 周期,stall 期间持续保持 END_REQ。这是 07 多目标与异构篇中 chiplet 边界判据的具体实现。

Garnet 3.0 协同

Garnet 3.0 是 gem5 Ruby 子系统的一部分,不可独立封装为 SystemC AT module。当 gem5 在 SystemC 内运行时,Garnet 隐式工作在 gem5 event queue 内,SystemC 侧在 memory port 边界只见聚合延迟

实用耦合模式:

SystemC AT master → TLM socket → Gem5MasterTransactor → gem5 Ruby/Garnet 3.0

适合复用现成 NoC 模型,但要接受 gem5 与 SystemC 双引擎的协同开销。

与算子级 DES 的接口

cycle-approx 的输出只有上层 DES 消费才有意义。这一节给标准接口范本。

Kernel 时长导出格式

最小接口:(op_id, duration_ns)——ASTRA-sim Roofline 后端就用这一档。

扩展三元组(LLMCompass[5]):

(duration_ns, avg_power_W, hw_utilization_ratio)

是文献中记录最完整的 cycle-approx → DES 接口格式。

AstraComputeAPI 范本

AstraComputeAPI 是最完整的公开接口范本(verbatim 自 GitHub astra-sim/astra-sim):

class AstraComputeAPI {
// 同步:立即返回时长
virtual timespec_t get_static_runtime(ComputeKernel&) = 0;

// 异步:回调通知时长
virtual void simulate(
ComputeKernel& kernel,
Sys* sys,
Callable callback,
meta_t* meta) = 0;
};

输入 是类型 + 属性 map(ComputeKernel),输出只有时长——功率 / 利用率刻意不进此结构,保持核心接口最小化。工厂方法封装 map 构造(如 create_llama_attn(batch, seq_len, ...))。

Chakra Trace 接口

Chakra(MLCommons)proto Nodeduration_micros 字段(uint64,微秒)是 cycle-approx 插入点:

字段类型用途
duration_microsuint64cycle-approx 写入
start_time_microsuint64DES 动态赋值
NodeTypeenum(8 类)COMP_NODE / COMM_COLL_NODE 等
data_deps / ctrl_depsedge listDAG 依赖

@tbl-ipm-g5-chakra-fields Chakra Node 关键字段

Chakra 的价值是解除 cycle-approx 工具与 DES 的点对点耦合——任何符合 Chakra schema 的工具都可互换。

Feedback Loop

cycle-approx 与 DES 不是单向喂养,而是 feedback 循环。三层工程化:

  1. 按算术强度分桶采样:memory / compute / balanced 各 10-20 个代表性点跑 cycle-approx
  2. 拟合 $\eta$ per-optype 向量:$\eta = T_{\text{roofline}} / T_{\text{cycle-approx}}$,注入 DES
  3. DES 扫描中 Z-score > 2 的 outlier 回触发 cycle-approx 精确标定,更新 LUT / RF,不重跑全量

已知局限:$\eta$ 需随硬件固件版本重标定——这是范式有向图(01 总览)的实践代价。

MVP 路径

新人最常踩的坑:一上来全建,迟迟跑不通。正确顺序是渐进闭环,每步可验证:

内容验证标志
1单 matmul kernel + PE 阵列 + scratchpad,无 NoC、无 HBM算子时长输出 vs SCALE-Sim 公式
2加 DMA + 简化 HBM(固定 latency 模型)KV 读延迟在合理区间
3加 DRAM 控制器(DRAMSys 或 DRAMsim3)bank conflict / refresh 出现
4加 NoC + 多 tile 并发多 tile in-flight 数 > 1
5加 c2c / chiplet 边界跨 chiplet 通信延迟可测
6接 Chakra trace 喂上层 DESDES 端到端 TTFT / TPOT 输出

@tbl-ipm-g5-mvp-path SystemC AT G5 建模的 MVP 渐进路径

每步定可验证输出(单一 latency 数字),才能定位是哪一层引入的误差。Step 1-2 完成 = MVP 闭环,已经能给 02 / 03 篇的内容做交叉验证

仿真速度优化与调试可观测性

速度优化

手法收益注意
Temporal decoupling + Quantum Keeper减少 context switchquantum 建议对齐一次 matmul tile $\sim 10\text{-}100$ ns
LT 内部避免显式 wait()减少调度开销仅 AT 边界 wait
Multi-threading 并行仿真多 Die / Tile 实例分线程需要 SystemC 多线程扩展(非标准 SC)
Prefill / Decode 用不同精度prefill compute-bound 可 LT,decode memory-bound 用 AT标定时口径要一致

@tbl-ipm-g5-speed-opt SystemC AT 仿真速度优化手法

调试可观测性

AT 模型没有波形,需要替代手段:

  • sc_trace:对关键信号(credit count、buffer 占用、TLM phase)生成 VCD,GTKWave 查看
  • Phase 日志:在 nb_transport_fw/bw 入口打印 phase 转换,确认 4-phase 顺序正确
  • Overlap 验证:专门日志记录 compute 节点与 communication 节点的 [start_time, end_time] 区间,事后画 Gantt 验证重叠是否真发生
  • 资源占用追踪:每 quantum 输出各模块 utilization,定位瓶颈

陷阱:AT 不等于无时序——最常见误区是把 AT 当成 analytical 的"有代码版本",直接 wait(latency) 了事。AT 的价值在于资源争用与背压传播,这些必须靠 TLM socket 连接和 target 端 blocking transport 才能涌现。跳过这步 AT 退化成 "带 SystemC 语法的 analytical",精度无提升。

时间单位隐患

sc_time 默认 double 精度,但 LLM 推理通信时延跨度从 ns(片内 SRAM)到 μs(c2c 链路)。混用 SC_NS / SC_US 且没有统一换算入口,多模块集成时出现量级错误且不报错,只是仿真结果偏小

工程纪律:整个项目统一基础单位为 SC_NS,所有 sc_time 构造经统一工厂函数,杜绝裸字面量。

标定与验证闭环

与 08 篇的方法论对接:

  • MVP 闭环(Step 1-2)对标 SCALE-Sim 解析公式,验证 compute 延迟
  • 加 HBM(Step 3)对标 DRAMsim3 / Ramulator 独立运行结果,验证 memory 延迟
  • 加 NoC(Step 4)对标 Garnet 独立运行结果,验证通信延迟
  • 接 Chakra 喂 DES(Step 6)对标 ASTRA-sim 端到端,验证集成正确性
  • 跨硬件外推前必须做 sensitivity analysis(08 篇),Pareto 稳定性 < 5% 差距下不可信

报告精度规范继承 08 篇:G5 输出必须含 max / P95 / P99,不能只给 avg——SimAI PP 77.2% 是反面教材。

升降档判据(G5 维度)

  • MVP 第一刀切到哪:单 matmul + compute 域(Step 1)——任何更复杂的起步都会卡住
  • 加 cycle-approx DRAM 何时:回答"KV 带宽实际多少"、bank conflict 影响——简单 SLO 评估不需要
  • 加 NoC 何时:回答"多 tile 通信延迟"、TP AllReduce 实际开销——单 chip 推理可省
  • 加 chiplet 边界 AT 何时:回答"跨 die 通信瓶颈"——单 die 设计无需
  • 不要把所有都升 AT:compute 域 LT + 边界 AT 是工程最优,全 AT 是常见过度设计

Takeaway

知识点核心结论
模块层级Chip → Die → Tile → Unit 四层,NNSim/AccTLMSim 实证
速度区间SystemC AT vs RTL 加速 3,000-13,000×
AT 4-phaseBEGIN_REQ → END_REQ → BEGIN_RESP → END_RESP,Accellera LRM verbatim
混合精度compute LT、NoC/HBM/chiplet 边界 AT,工程最优
Compute 落地PE 阵列做 TLM target + SC_THREAD 跑 SCALE-Sim 公式 + η 静态注入
Memory 落地scratchpad 显式管理 + DMA 两种 + DRAM 后端三选一(DRAMSys 首选)
Interconnect 落地NoC 4-stage pipeline + c2c flit/message-level + 集合通信交给上层
与 DES 接口AstraComputeAPI 范本 + Chakra trace + Z-score>2 outlier 回触发标定
MVP 路径渐进 6 步,每步可验证,不要一上来全建
调试sc_trace + phase log + Gantt overlap 验证;AT 不是带语法的 analytical

开放问题

  • G5 与 gem5 / SST 等其它 cycle-approx 框架的可移植性:接口标准(Chakra)解决了与上层 DES 的耦合,但底层资源域(NoC / DRAM)的可移植性仍是各家专有
  • 动态 $\eta$ 在 SystemC AT 内的实现:静态 $\eta$ 是当前工程退化,动态(随负载变化)需要 memory 域回调,缺成熟模式
  • 国产 AI 芯片的 SystemC AT 范例:寒武纪 / 壁仞 / 燧原 / 华为昇腾的 perf model 不公开,无法对标本篇结论
  • G5 自身的 P99 / 尾分布报告:08 篇强调精度报告必须含尾分布,但 cycle-approx 单次运行无法直接产出尾分布,需多次随机种子或 sensitivity 配合,工程化路径未充分研究

参考资料

  1. AccTLMSim: Transaction-level Model Simulator for Communication-Limited Accelerators, 2020. https://arxiv.org/abs/2007.14897
  2. Lee et al., NNSim: A Fast and Accurate SystemC/TLM Simulator for Deep Convolutional Neural Network Accelerators, IEEE VLSI-DAT 2019. https://ieeexplore.ieee.org/document/8741950/
  3. Li et al., DRAMsim3: A Cycle-Accurate, Thermal-Capable DRAM Simulator, IEEE CAL 2020. https://github.com/umd-memsys/DRAMsim3
  4. Luo et al., Ramulator 2.0: A Modern, Modular, and Extensible DRAM Simulator, IEEE LCA 2023. https://arxiv.org/abs/2308.11030
  5. Zhang et al., LLMCompass: A Hardware Evaluation Framework for LLM Inference, ISCA 2024. https://arxiv.org/abs/2312.03134

延伸阅读