跳转至

延迟、吞吐率与流水线冲突

逐指令页面列出的周期来自 910B 架构周期模型,适合做静态排布和冲突分析,但不是芯片实测性能承诺。频率、内存命中、bank 分布、地址模式、固件和并发都会改变端到端时间。

执行域

典型路径 主要动态冲突
Scalar/Flow issue → Scalar EX/LSU → 固定延迟槽 → 写回/改 PC X/SPR RAW/WAW、多周期 FPU、LSU、分支重定向
Vector issue → IBUF/uop → UB read → EXEU → UB/特殊写回 → retire MASK/VA 依赖、uop 队列、UB bank/port、同 op 间隔
Cube issue → L0A/L0B read → MAC 迭代 → L0C write → retire shape 展开、L0 端口、累加依赖、unit/control 状态
MTE issue → 地址/描述展开 → 路由队列 → 源读/目标写 → event burst/stride、队列深度、源/目标端口、跨域 event
Fixpipe L0C read → 转换/量化 → 目标写 L0C 与 Cube 竞争、转换模式、目标端口

如何读周期表

  • L=...:固定执行/退休延迟;后续无依赖指令仍可能每拍发射。
  • rd/ex/wr:Vector uop 的读、执行、基础写回段,不应简单相加后乘 repeat。
  • \(T=\max_i(\ldots)\):多个 uop 可以重叠,最终完成取决于最晚写回 uop。
  • issue_interval:无 hazard 时的模型发射条件,不等于设备 benchmark 的倒数吞吐率。
  • dynamic_stalls:会把基础周期拉长的结构/数据冲突。

Vector 的典型完成式为:

\[ T=\max_{i}\!\left(t_{\mathrm{issue},i}+L_{\mathrm{rd},i}+L_{\mathrm{ex},i}+L_{\mathrm{wr,actual},i}\right)-t_{\mathrm{dispatch}}+1 \]

Lwr_actual 会被 UB bank/port 仲裁重新计算;repeat、block、MASK、stride 和跨 bank 地址决定 uop 数量。

关键 hazard

hazard 触发条件 排布方式
RAW 消费者读取尚未写回的 X/SPR/VA/MASK/存储数据 保持显式依赖;跨域使用 event/wait
WAW 两条指令写同一目标,前者尚未到可提交点 不重用目标;必要时等待
MASK mask 更新尚未完成,后续 Vector 消费 MASK 把 mask 设置放在消费序列前并保持依赖
UB bank/port 同拍 uop 访问同 bank 或超端口数 改地址/stride,错开读写,测量 bank 模式
L0C Cube 累加、Fixpipe 或搬出竞争 L0C 用事件分阶段,避免同 tile 并发写/读
多周期 Scalar f32、除法、s64 乘法等占用多周期单元 与独立域交错,避免紧邻依赖
barrier/event 等待的 event 未由正确源域产生 成对使用正确 src/dst 后缀和 event 槽

设备测量

硬件延迟和吞吐率必须在 910B 上分别测量:

  1. 单条依赖链测 latency;每条结果作为下一条输入。
  2. 多条独立指令流测 reciprocal throughput。
  3. 固定地址、MASK、repeat、shape 和 warm-up,单独改变一个因素。
  4. 分别测试无冲突与刻意 bank 冲突的地址。
  5. 记录编译器版本、目标 CPU、频率/电源状态和事件序列。

项目提供的 设备验证清单 保留结果栏;未填结果不能称为设备实测。