G5 计算建模设计规格
版本:1.0.0 状态:Accepted 创建日期:2026-06-20 最后更新:2026-06-20 作者:xiang.li 前置:互联通信G5仿真建模设计规格
版本号规则 (SemVer):
- major (X.0.0):架构变更、接口不兼容、公式体系重构
- minor (1.X.0):新增算子模型/精度、新增章节、扩展接口(向后兼容)
- patch (1.0.X):修正笔误、补充说明、更新实现说明
变更历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 1.0.0 | 2026-06-20 | 初版:CUBE 矩阵乘计算建模——厂商中立抽象 + 翻译 TPUPerf 闭式 cycle 公式 + 访存边 + overlap + 标定门控 |
@tbl-spec-gcm-01 文档变更历史
概述
本 spec 定义 G5 仿真中计算侧(CUBE 矩阵乘)的建模架构:把当前未标定的 placeholder 升级为「翻译自算能 TPUPerf 闭式 cycle 公式的厂商中立行为级模型」,并显式声明其标定边界。本 spec 首篇只覆盖 CUBE 矩阵乘(mm2 与量化 smm2),向量计算与 HAU 排序留待后续篇。
计算侧建模产出三件事:单 kernel 的计算 cycle(翻译 TPUPerf 公式)、访存边(自建,TPUPerf 无)、二者的 overlap(显式可标参数)。三者合成 kernel 时长,喂给 G5 事件驱动时序层。
背景
G5 对同一条仿真链路两侧保真度不对称:通信侧(CDMA/PAXI/RC-Link/C2C/Switch)按 SG2262 spec 建到 cycle 级可信,计算侧只有形状骨架、参数未标定。当前计算时延模型存在三个量化问题:
- 计算速率常数无 spec 背书:速率常数(lane / cube 维度 / 频率 / 启动周期)是 placeholder,源码已标
[UNVALIDATED],算出的绝对计算时延不可信。 - 缺访存边:现有 cycle 公式只算 PE 阵列乘加吞吐,未计入操作数从片上存储读入的时间,访存受限算子(decode、部分 attention)被系统性低估。
- 覆盖不全:只建了矩阵乘 nn 一种转置格式,缺 nt/tt 变体、缺量化矩阵乘、缺 bank 冲突惩罚项。
驱动力:G5 的目标是端到端推理性能仿真器,计算侧不可信使端到端 TTFT/TPOT 失去地基。算能已有 SystemC 仿真器 TPUPerf,其矩阵乘 cycle 是闭式公式,可作为计算建模的来源——本 spec 定义如何复用它、复用到什么程度、以及在无真机标定时如何诚实界定可信范围。
名词定义
下表钉死本 spec 用到的核心专有名词,后文统一语言。
| 名词 | 定义 | 与易混淆概念的区分 |
|---|---|---|
| TPUPerf | 算能内部 SystemC TLM-2.0 cycle-approximate 计算仿真器,含 SG2262 矩阵乘的闭式 cycle 公式 | 与 G5 区别:TPUPerf 是 C++ SystemC、SG2262 专属、分钟级 batch;G5 是 Rust event-driven 端到端编排 |
| CUBE | TPU 中执行矩阵乘/卷积的张量计算单元,SG2262 含 4 个并行子 CUBE | 与 ARRAY 区别:ARRAY 是向量计算阵列(16 LANE),本 spec 不涉及 |
| PE 阵列 | 矩阵乘的二维脉动计算网格抽象,厂商中立 | SG2262 的 CUBE 是 PE 阵列的一个参数实例 |
| dataflow | 矩阵乘三维 M/N/K 哪一维驻留阵列的策略(OS/WS/IS) | 不同芯片选不同 dataflow,抽象层用参数表达 |
| mm2.nn / mm2.nt / mm2.tt | 矩阵乘的三种转置格式(左右矩阵是否转置),TPUPerf 中 des_tsk_eu_typ = 4/5/6 | 三者 cycle 公式结构相同、系数不同 |
| smm2 | 量化矩阵乘(short matmul),含 bias / block-quant 项,TPUPerf des_tsk_eu_typ 含 13 | 与 mm2 区别:smm2 用区间重叠法算 bank 冲突、有额外 bias_lat / 量化分支 |
| 计算 cycle | kernel 在 PE 阵列上的纯计算节拍数,由翻译的闭式公式给出 | 不含访存等待;与访存边正交 |
| 访存边 | kernel 操作数从片上存储(LMEM)/外存(HBM)读入的时间 | TPUPerf 与现 G5 均无此项,本 spec 自建 |
| 带宽域 | 一条访存边占用的物理带宽资源类别(LMEM 总线 / HBM / D2D / C2C) | 不同带宽域独立,错配会导致带宽口径错误 |
| overlap factor | 计算与访存重叠比例,0 = 完全串行(相加),1 = 完全重叠(取 max) | 显式可标参数,非二值假设 |
| bank 冲突惩罚 | 操作数与结果落在同一 LMEM bank 时的额外 cycle,加在 K-loop 项内 | TPUPerf 中是计算侧惩罚项,非访存子系统模型 |
| ch_per_cyc | 每 cycle 处理的 K 维通道数,按精度缩放(INT8 基准,BF16 半,FP32 四分一) | 决定 K-loop 迭代数 |
| 标定锚点 | 用于校验模型绝对精度的真机实测点 | 当前无 SG2262 真机锚点 |
| unvalidated 门控 | 底层未标定时,端到端绝对指标(TTFT/TPOT/SLO)不对外返回,只返回相对比较 | 防止 placeholder 绝对数字被当真 |
| 厂商中立抽象 | compute 单元的参数化抽象(PE 阵列维度 + dataflow + 标定参数),具体芯片作参数实例 | 与硬编码 SG2262 结构区别 |
目标与非目标
目标 / 需求清单(逐条可核对):
- 需求:CUBE 矩阵乘计算 cycle 翻译 TPUPerf 闭式公式,给定同一组输入(shape + 精度 + 操作数地址),G5 输出逐 kernel 严格等于 TPUPerf 输出(无容差)。
- 需求:覆盖 mm2 的 nn / nt / tt 三种转置格式,以及量化 smm2 的 nn / nt / tt 与 block-quant 变体。
- 需求:计算 cycle 公式的速率常数(lane 数 / eu 数 / ch_per_cyc / 启动周期 / bank 冲突比例)从芯片参数实例(YAML)加载,SG2262 作为一个参数实例,公式结构与参数分离。
- 需求:每个 kernel 产出独立的访存边时长,且每条访存边显式标注其带宽域;KV cache 读取的带宽域与通信侧是否共享必须在集成点画清。
- 需求:kernel 时长 =
combine(计算 cycle 时长, 访存边时长, overlap_factor),overlap_factor 是显式配置参数,默认保守(非重叠),报告标注该参数对结果的敏感度。 - 需求:端到端绝对指标在底层未标定时被门控——
unvalidated标志置位时,SLO 判定只返回相对比较结果,不返回绝对 TTFT/TPOT 数值。 - 需求:spec 显式声明标定边界——本模型产出相对比较 / 设计空间探索可信、绝对值不可信,绝对精度依赖未来真机锚点。
非目标(明确不做):
- 非目标:绝对 TTFT/TPOT/SLO 精度。无 SG2262 真机锚点,翻译 TPUPerf 继承其未对硅验证的精度,绝对值不作承诺。
- 非目标:向量计算(ARRAY/EU)与 HAU 排序建模,留待后续篇。
- 非目标:NoC / D2D / C2C 通信建模,走 CrossRing 与既有通信侧 spec,不在本 spec。
- 非目标:请求级 DES(continuous batching / PD 分离),本 spec 只到单 kernel 时长,端到端调度层另立 spec。
- 非目标:运行时接入 TPUPerf。TPUPerf 是 cycle-approx batch 仿真器,跑一次需 elaborate 整芯片、分钟级,且无单 kernel compute API,不进 G5 运行时热循环。
- 非目标:PE 阵列内部逐节拍 cycle-sim(fill/drain 微观建模)。对 LLM 大算子收益 <1% 且需不可得的微架构常数。
用例说明
假设本设计已实现,一个开发者评估某并行策略下 prefill 的计算时长:
- 输入:一个矩阵乘 kernel 描述——
M=4096, N=2048, K=5120、精度 BF16、转置格式 nn、操作数与结果的片上地址。 - 厂商中立抽象解析:从芯片参数实例(SG2262 YAML)加载 PE 阵列参数——
lane=16, eu=8, ch_per_cyc(INT8 基准)=32 → BF16=16, init_nn=44。 - 计算 cycle:按 mm2.nn 公式
ceil(4096/16)·ceil(2048/8)·(ceil(5120/16)+bank_conflict)+44,bank_conflict 由操作数/结果地址是否同 bank 决定。 - 访存边:按操作数字节数 / LMEM 总线带宽算读入时间,标注带宽域 = LMEM 总线。
- 合成:kernel 时长 =
combine(计算时长, 访存时长, overlap_factor=0)(默认非重叠 = 相加)。 - 输出:单 kernel 时长(ns),喂给 G5 事件驱动时序层。开发者扫不同并行策略时,得到的是相对排序可信的计算时长——若请求绝对 SLO 判定,
unvalidated门控返回"绝对值不可信,仅相对比较"。
详细设计
概念模型
计算侧 kernel 时长由三个正交分量合成:
| 分量 | 来源 | 物理含义 |
|---|---|---|
| 计算 cycle 时长 | 翻译 TPUPerf 闭式公式 ÷ 频率 | PE 阵列纯计算节拍 |
| 访存边时长 | 自建:操作数字节 ÷ 带宽域带宽 | 操作数读入等待 |
| overlap | 显式 overlap_factor 参数 | 计算与访存的重叠程度 |
@tbl-gcm-three-parts 计算 kernel 时长的三个分量
合成关系:
$$\begin{equation} t_{\text{kernel}} = (1 - \rho) \cdot (t_{\text{comp}} + t_{\text{mem}}) + \rho \cdot \max(t_{\text{comp}}, t_{\text{mem}}) \label{eq:gcm-kernel-combine} \end{equation}$$其中 $\rho$ = overlap_factor ∈ [0, 1],$\rho=0$ 为完全串行(相加),$\rho=1$ 为完全重叠(取 max)。默认 $\rho=0$(保守非重叠)。
厂商中立抽象
矩阵乘计算单元抽象为「PE 阵列 + dataflow + 标定参数」,具体芯片作参数实例:
- PE 阵列参数:lane 数、eu 数、ch_per_cyc(按精度的基准通道数)、启动周期、bank 冲突比例表。
- dataflow:矩阵乘三维 M/N/K 到阵列空间轴/时域轴的映射(OS/WS/IS),影响公式中哪一维归 lane、哪一维归 eu、哪一维归 ch。
- 参数实例:SG2262 的 CUBE 是一组参数值(见附录 C),存于芯片配置 YAML,不硬编码进公式。
设计原理:CLAUDE.md 定义"芯片是输入维度",compute 域绑死单厂商与平台定位矛盾。通信侧的拓扑/路由已厂商中立,compute 域补齐中立性,G5 才能仿真任意芯片。公式结构(ceil-tiling + 启动税 + bank 冲突)是跨厂商通用的脉动阵列建模骨架,差异只在参数。
计算 cycle 公式(翻译自 TPUPerf)
公式结构是接口契约,速率常数从参数实例加载。记 $M$ = 输出通道数、$N$ = 输出宽、$K$ = 归约维、$L$ = lane 数、$E$ = eu 数、$C$ = ch_per_cyc、$B$ = bank 冲突惩罚(0/1/2)。
mm2.nn(左右矩阵均不转置,$K$ 取左矩阵归约维):
$$\begin{equation} \text{cycle}_{\text{nn}} = \lceil M/L \rceil \cdot \lceil N/E \rceil \cdot \left( \lceil K/C \rceil + B \right) + \text{init}_{\text{nn}} \label{eq:gcm-mm2-nn} \end{equation}$$mm2.nt(右矩阵转置,$K$ 取右矩阵宽):
$$\begin{equation} \text{cycle}_{\text{nt}} = \lceil M/L \rceil \cdot \lceil N/E \rceil \cdot \left( \lceil K/C \rceil + B \right) \cdot \lambda + \text{misc}_{\text{nt}} \label{eq:gcm-mm2-nt} \end{equation}$$其中 $\lambda$ = loop_cycle 系数,由结果精度与 bias 配置决定(FP32/INT32 且无 bias 时为 2,否则 1)。$\text{misc}_{\text{nt}}$ 是 nt 格式特有的加性常数,与 nn/tt 的 $\text{init}$ 语义不同——nt 的 init_cycle 为 0,加性项是 misc(参数实例值见附录 C)。
mm2.tt(左右矩阵均转置):
$$\begin{equation} \text{cycle}_{\text{tt}} = \lceil M/L \rceil \cdot \lceil N/E \rceil \cdot \left( \lceil K/C \rceil + B' \right) + \text{init}_{\text{tt}} \label{eq:gcm-mm2-tt} \end{equation}$$其中 $B'$ = (bank 冲突 > 0 ? 1 : 0),是 tt 格式特有的简化惩罚。
量化 smm2:结构同上,差异为——bank 冲突用区间重叠法(操作数 bank 范围两两重叠计数)而非地址相等判断;$N$ 维有下界 $\max(N, 2E)$;含额外 bias_lat 项与 block-quant 分支。量化是独立子模型,覆盖工作量与 mm2 同量级,不可简化为"加几个系数"。
精度缩放:$C$(ch_per_cyc)与 $E$(eu 数)按精度从参数实例各自独立加载,不由 INT8 基准算术推导。SG2262 实例中 $C$ 恰为 INT8 基准 / BF16 取半 / FP32 取四分一(1/2/4 是该芯片取值的巧合,非建模假设——若某芯片三值不成 1/2/4 比例,按独立加载值算以保证 G5 == TPUPerf)。$E$ 选择口径为二分:BF16 走 eu_16bit、INT8 与 FP32 均走 eu_8bit(与 $C$ 的三分口径不对称,FP32 的 eu 不单列)。
bank 冲突惩罚的可实现性:mm2 的 $B$ 由操作数地址与结果地址是否落在同一 LMEM bank 决定。首篇 G5 解析编排层不产出真实 LMEM bank 地址布局,故 $B$ 暂置 0(stub),该项标记为"首篇不建模"。影响幅度:$B \in \{0,1,2\}$ 加在 K-loop 项 $\lceil K/C \rceil + B$ 内,大算子 $K$ 大时 $B$ 占比 $< 1\%$(如 $K=5120, C=16$ 时 $\lceil K/C \rceil = 320$,$B=2$ 仅占 0.6%);小算子占比上升,需在该场景标注。后续为 G5 mapping 加 LMEM 地址布局后启用真实 $B$(见后续工作)。
bank 冲突比例(MFU 报告项):TPUPerf 另产出 bank_conflict_ratio(0→0、1→0.67、2→1.0),用于 MFU 报告,与 cycle 计算分离。本 spec 将其纳入为可选 MFU 观测量(不进 cycle),首篇 $B$ stub 为 0 时该比例恒为 0,启用真实 $B$ 后生效。
访存边
TPUPerf 与现 G5 均无访存边——TPUPerf 的 bank 冲突是计算侧惩罚项,其 LMEM 模型仅为固定延迟(flat latency),bank 冲突在访存层是未实现 stub。本 spec 自建访存边:
$$\begin{equation} t_{\text{mem}} = \sum_{\text{operand}} \frac{\text{bytes}_{\text{operand}}}{\text{BW}_{\text{domain}(\text{operand})}} \label{eq:gcm-mem-edge} \end{equation}$$每个操作数的读取归属一个带宽域,带宽取该域参数(LMEM 总线宽度 × 频率 / HBM 带宽 / 等)。带宽域参数来自 TPU spec 总线宽度(如 512-bit DMA 总线)。
访存层 bank 冲突:首篇仅用峰值带宽,不建模访存层 bank 冲突(同 bank 操作数的访存串行化),TPUPerf 该项也是 stub。后果:访存边有效带宽偏乐观(用峰值当有效),访存时长偏短。该高估在标定边界声明范围内(绝对值不可信),待 SRAM 时序 spec 获取后补访存层 bank 冲突。
带宽域参数来源:SG2262 的 LMEM/SRAM 访问时序与 GDMA 搬运 spec 原始文档尚未获取。首篇用 TPU spec 总线宽度推算的峰值带宽占位,spec 显式标注访存边绝对值不可信。该参数随原始文档获取后修订(见后续工作),与整体"相对可信、绝对不可信"边界一致。
overlap
kernel 内计算与访存的重叠由显式参数 $\rho$ 控制(见 ),不采用二值假设。设计原理:完美重叠($\rho=1$)会乐观、完全串行($\rho=0$)会高估,二者都是无依据的极端。CP 评估曾因完美重叠假设导致拐点乐观偏差——本 spec 不重蹈,而是把 $\rho$ 暴露为可标参数,报告同时给出该参数的敏感度区间。默认值取 $\rho=0$(保守非重叠),理由:标定不足时高估比低估安全(不会误判 SLO 可满足)。
标定边界与门控
模型分两层验收,互不混淆:
- 翻译正确性(本 spec 可证伪的核心):给定同一输入,G5 计算 cycle 严格等于 TPUPerf 输出。验收标准是
G5 == TPUPerf,无容差,可写严格断言。这一层验的是"翻译对不对",不是"对硅对不对"。 - 对硅正确性(本 spec 不承诺):TPUPerf 常数未对硅验证、repo 无标定数据,翻译继承其未知绝对精度。无真机锚点时,端到端绝对指标不可证伪。
门控规则:底层(计算/访存)未取得真机标定锚点时,unvalidated 标志置位。该标志置位时,端到端 SLO 判定函数只返回相对比较(配置 A vs B 的相对优劣),不返回绝对 TTFT/TPOT 数值。防止 placeholder 绝对数字进入 demo / 汇报被当真。
集成点
- 上游:G5 mapping 层产出矩阵乘 kernel 描述(shape + 精度 + 转置格式 + 操作数地址)。
- 下游:本模型产出单 kernel 时长(ns),喂 G5 事件驱动时序层串端到端。
- 与通信侧的带宽域边界:decode 阶段 KV cache 从 HBM 读,这条访存边的带宽域与 CrossRing 通信侧(NoC/D2D/C2C)是否共享同一段物理带宽(如 HBM 控制器),是端到端集成的关键决策——错配会复现"CP 评估走错带宽域"的同构错误。本决策移出首篇范围、defer 到请求级 DES spec:首篇只覆盖 CUBE 矩阵乘(prefill 计算主导),KV 读 / continuous batching / PD 分离属请求级调度层,带宽域共享关系在该层定义。首篇约束:访存边显式携带"带宽域"标签字段,使后续 DES spec 能定义共享矩阵而无需改本 spec 的访存边模型。
引用
- TPUPerf 矩阵乘 cycle 公式来源:算能内部 TPUPerf 仓库
spec/sg2262/src/mm2_cmd_sg2262.cc(MM2Cmd::get_custom_profile/SMM2Cmd::get_custom_profile),gerrit Brahma 分支。 - SG2262 微架构参数来源:TIU spec v1.0.2、TPU_SPEC v1.0.5、TPU Tensor 指令集、TPUPerf 开发规范(存于仓库外
项目/TPU/,非本 repo)。 - 通信侧建模体例参照:G5-CDMA建模设计规格。
- 计算建模现状与缺口:G5-计算建模现状与缺口(本 spec 实现后更正其"计算侧无 spec 背书"结论)。
备选方案
| 维度 | 翻译闭式公式(选定) | roofline + η | profile 查表 | 运行时接入 TPUPerf | 脉动 cycle-sim |
|---|---|---|---|---|---|
| 计算时长来源 | TPUPerf 闭式公式翻译进 Rust | FLOPs/峰值 × η | 真机实测查找表 | TPUPerf SystemC 运行时 | 逐节拍模拟 |
| 标定依赖 | 继承 TPUPerf 常数 | 经验 η / 真机 η | 真机网格 | 同翻译 | 微架构常数 |
| 厂商中立 | 是(公式结构通用) | 是 | 否(换芯片重测) | 否(SG2262 专属) | 部分 |
| 端到端可跑 | 是(Rust 标量快) | 是 | 是 | 否(分钟级 batch) | 否(跑不动) |
| bank 冲突/转置精度 | 有(翻译保留) | 无(η 抹掉) | 有(实测含) | 有 | 有 |
选择理由:翻译闭式公式在四条上胜出——(1) 复用算能已建的真实公式(含 bank 冲突 + 转置 + 量化),不自己猜常数;(2) 全 Rust、厂商中立、端到端可跑;(3) 公式是 ~15 行纯整数运算,可翻译性高,G5 现有 mm2.nn 已是其子集;(4) 验收标准可证伪(G5 == TPUPerf)。否决其余:roofline+η 抹掉 bank/转置细节、profile 查表需真机且换芯片重测、运行时接入被无 compute API + 分钟级 batch 堵死、脉动 cycle-sim 需不可得微架构常数且跑不动端到端。完整业界对比见附录 A。
非功能性需求
| 维度 | 本 spec 的考虑 |
|---|---|
| 性能(仿真精度) | 翻译正确性:G5 == TPUPerf 无容差。绝对精度:不承诺(无真机锚点),相对排序可信 |
| 性能(仿真速度) | 计算 cycle 为闭式标量计算,O(1),不进端到端热循环瓶颈 |
| 兼容性 | compute 参数下沉芯片 YAML,需同步更新 configs/chips/_template.yaml;新增字段不破坏既有通信侧配置 |
| 可观测性 | kernel 时长输出含 max/P95(继承通信侧报告规范),bank_conflict_ratio 作可选 MFU 观测量 |
| 安全性 / 隐私 | N/A——内部仿真器,不暴露公网,不处理用户数据 |
局限与后续工作
局限(本设计的代价)
| 风险 / 局限 | 影响 | 缓解措施 |
|---|---|---|
| TPUPerf 常数未对硅验证 | 绝对计算时延精度未知 | 标定边界显式声明;门控绝对指标;待真机锚点升绝对 |
| 无真机标定锚点 | 端到端绝对 TTFT/TPOT 不可证伪 | 目标降级到相对比较 / 设计空间探索 |
| 访存边带宽域参数暂缺真实值 | 访存时长用峰值带宽占位、偏乐观 | 标注占位;获取 SRAM/GDMA spec 后修订 |
| 首篇 bank 冲突项 stub 为 0 | 计算 cycle 略低估,大算子 < 1%、小算子占比上升 | 标注;为 G5 mapping 加 LMEM 地址布局后启用真实 B |
| KV 读 HBM 带宽域共享关系未定 | decode TPOT / continuous batching 资源争用建模待精化 | defer 到请求级 DES spec;首篇访存边预留带宽域标签字段 |
| 三层(计算/访存/DES)独立未验证 | 端到端偏差归因困难 | 每层独立验收标准 + 计算层先严格对齐 TPUPerf 再叠加 |
后续工作
- 向量计算 + HAU 排序建模(中优先级,前置:本篇 Accepted)。
- 真机标定锚点接入(高优先级,前置:获得 SG2262 真机实测渠道)——升相对到绝对。
- 访存层 bank 冲突建模(中优先级,前置:SRAM 时序 spec)。
- G5 mapping LMEM 地址布局(中优先级,前置:无)——为操作数/结果分配 bank-distinct 地址,启用计算侧真实 bank 冲突项 B。
- 请求级 DES 层(高优先级,独立 spec)——continuous batching / PD 分离 + KV-HBM 带宽域共享关系,消费本 spec 的 kernel 时长。
验收标准
| 场景 | 指标 | 目标值 | 测试方法 |
|---|---|---|---|
| mm2.nn 逐 kernel | G5 cycle vs TPUPerf cycle | 严格相等(无容差) | 同输入跑 TPUPerf 与 G5,逐 kernel 比对 |
| mm2.nt / mm2.tt | 同上 | 严格相等 | 同上,覆盖转置变体 |
| 量化 smm2(含 block-quant) | 同上 | 严格相等 | 同上,覆盖量化分支 |
| 精度缩放 | INT8/BF16/FP32 的 ch_per_cyc | 与参数实例一致 | 各精度跑一组 shape |
| 厂商中立 | 换参数实例(改 lane/eu/ch) | cycle 随参数变、公式不变 | 注入不同 YAML 参数实例 |
| overlap 参数 | ρ=0 与 ρ=1 的 kernel 时长 | 分别等于相加与 max | 固定计算/访存时长,扫 ρ |
| 门控 | unvalidated 置位时 SLO 查询 | 返回相对比较、不返回绝对值 | 置位标志,调 SLO 判定 |
单元测试关键 case:
- mm2.nn,
M=4096,N=2048,K=5120,BF16,无 bank 冲突 → cycle 等于 TPUPerf 同输入输出。 - mm2.nn,操作数与结果同 bank → 首篇 bank 冲突项 B stub 为 0(不建模);启用真实地址布局后应等于 TPUPerf 的 B 值。
- 换 lane=16 参数实例 → cycle 按
ceil(M/16)变化,公式结构不变。
附录
附录 A:业界调研
LLM 推理仿真器建模单算子计算时长的六种代表方式对比:
| 工具 | 时长建模方式 | 标定方式 | 端到端 / 速度 | 厂商中立性 |
|---|---|---|---|---|
| ASTRA-sim 2.0 | event-driven 框架 + roofline compute backend(可插 measured) | datasheet peak + η 或外部 profile | 能;$10^3$–$10^4\times$ | 中立 |
| Calculon | 逐算子闭式解析(linear/bmm/softmax 各有式) | 分段阶梯 η 曲线(按传输规模分档) | 能(训练端到端);~1 ms | 中立 |
| GenZ | roofline + 固定全局 η | 实测固定 η(A100=0.40,H100-8×=0.75) | 能;$10^6\times$ | 中立 |
| LLMCompass | cycle-approx 分层 tiling + mapper 搜 schedule,利用率涌现 | mapper 自动寻优,无经验 η | 能但慢(4×A100 GPT-3 ~16 min) | 中立 |
| SCALE-Sim | 脉动 cycle-sim 解析公式,fill/drain 启动税显式 | 微架构常数(阵列维/dataflow/SRAM) | 算子/层级,非 LLM 端到端 | 绑定脉动阵列 |
| Vidur | profile 查表 + 随机森林回归 | 真机 profile(CUPTI + PyTorch) | 能(请求级);$10^4$–$10^5\times$ | 中立但必须真机 |
@tbl-gcm-survey 单算子计算时长建模与标定方式横向对比
本 spec 的差异化定位:「翻译厂商已有闭式 cycle 公式作离线公式源、不运行时接入」有已发表先例——SCALE-Sim TPU(arXiv 2603.22535)把脉动算子路由到已验证解析模型、用线性回归把 cycle 标定到真机时间,与本 spec 机制同构(区别仅在公式来源:它自推脉动闭式,本 spec 直接复用厂商 TPUPerf 闭式);Calculon 的「逐算子闭式喂上层 DES」是同一思路另一半。相对 roofline+η(GenZ/Calculon):把 tile/wave 量化与启动税编进公式而非折进 η,精度上限高一档,代价是绑定特定芯片。相对 profile 查表(Vidur):解析外推天然覆盖未流片芯片/新形状,不需真机。生态位 = vendor closed-form as offline calibration source,介于 Calculon 阶梯 η 与 SCALE-Sim 脉动闭式之间。
引用(DOI 优先):
- ASTRA-sim 2.0 — Rashidi et al., ISPASS 2023. https://arxiv.org/abs/2303.14006
- Calculon — Isaev et al., SC 2023. https://dl.acm.org/doi/10.1145/3581784.3607102
- GenZ — Bambhaniya et al., 2024. https://arxiv.org/abs/2406.01698
- LLMCompass — Zhang et al., ISCA 2024. https://doi.org/10.1109/ISCA59077.2024.00082
- SCALE-Sim — Samajdar et al., 2018. https://arxiv.org/abs/1811.02883
- SCALE-Sim TPU(最近先例)— 2026. https://arxiv.org/abs/2603.22535
- Vidur — Agrawal et al., MLSys 2024. https://arxiv.org/abs/2405.05465
- 项目内底稿:02-计算建模、08-标定与验证
附录 B:实现说明
实现后补充,记录 spec 与实现的偏差。
附录 C:SG2262 参数实例
SG2262 CUBE 矩阵乘的参数取值(来源:TPUPerf 配置 + TPU_SPEC v1.0.5),落地到芯片配置 YAML,公式正文不含裸字面量。
| 参数 | 值 | 来源 |
|---|---|---|
| lane 数 $L$ | 16 | TPU_SPEC(8 ARRAY × 2 LANE) |
| eu 数 $E$(INT8 / FP32) | eu_8bit | TPUPerf get_cube_ohow_8bit |
| eu 数 $E$(BF16) | eu_16bit | TPUPerf get_cube_ohow_16bit |
| ch_per_cyc $C$(INT8) | 32 | TPUPerf get_cube_ic_8bit |
| ch_per_cyc $C$(BF16) | 16 | TPUPerf get_cube_ic_16bit |
| ch_per_cyc $C$(FP32) | 8 | TPUPerf get_cube_ic_32bit |
| init_cycle(mm2.nn) | 44 | TPUPerf MM2Cmd |
| misc(mm2.nt) | 19 | TPUPerf MM2Cmd(nt 的 init_cycle=0) |
| init_cycle(mm2.tt) | 47 | TPUPerf MM2Cmd |
| bank 冲突比例(B=0/1/2) | 0 / 0.67 / 1.0 | TPUPerf bank_conflict_ratio(首篇 B stub 为 0) |
| LMEM 总线带宽域 | 待获取(占位用 512-bit DMA 总线峰值推算) | TPU_SPEC 总线宽度 |
@tbl-gcm-sg2262-params SG2262 CUBE 矩阵乘参数实例
$E$ 与 $C$ 三精度值各自从配置独立加载(非由 INT8 基准算术推导);量化 smm2 的 init_cycle(33/44/47)与 bias_lat / block-quant 项见 TPUPerf
SMM2Cmd。LMEM 带宽域真实参数待 SRAM/GDMA spec 获取后填入。