跳转至

架构仿真器全景

架构仿真不是为了生成一个“看起来很准”的性能数字,而是用可控模型回答设计问题。先确定问题需要的抽象层和精度,再选工具;越详细的模型通常越慢、参数越多,也越容易产生伪精确。

四类模型

flowchart LR
    F[功能仿真<br/>结果是否正确] --> T[Trace 驱动<br/>固定指令/事件流]
    T --> C[时序/周期模型<br/>资源冲突与延迟]
    C --> P[RTL/电路级<br/>实现与时序收敛]

    A[解析/代价模型<br/>公式 + 映射] -. 快速设计空间搜索 .-> T
类型 主要输入 主要输出 适合回答 不适合直接回答
功能仿真 程序、ISA/设备模型 执行结果、事件 指令语义是否正确,软件能否运行 精确周期与功耗
Trace 驱动 预采集指令/访存 Trace 吞吐、Cache/流水线统计 固定路径在不同配置下怎样变化 改 ISA 后动态行为、输入相关控制流
时序/周期模型 程序或 Trace + 微架构配置 周期、队列、争用 Pipeline、Cache、NoC 和调度瓶颈 未建模的软件/物理效应
解析/代价模型 算子、映射、硬件参数 延迟、能耗、流量估计 大规模 Mapping/设计空间搜索 复杂动态控制和周期级瞬态
RTL/电路级 RTL、工艺与约束 周期、面积、功耗、时序 实现能否闭合,真实硬件代价 早期的大范围快速探索

工具如何分工

工具 主要对象 特点 典型问题
gem5 CPU、Cache、内存与完整系统 事件驱动;支持 Syscall Emulation 与 Full System 等模式 Cache/内存改动、CPU 微架构、OS 交互如何影响性能?
GPGPU-Sim / Accel-Sim NVIDIA 风格 GPU PTX 或 SASS Trace 前端 + 详细 GPU 性能模型 Warp 调度、Cache、访存与核心配置对 kernel 有何影响?
Timeloop / Accelergy 张量加速器 解析模型、Mapping 搜索,估算性能/能耗 Buffer 大小、阵列规模、Loop Mapping 如何权衡?
MAESTRO DNN 数据流 用数据复用与占用描述时空 Mapping Weight/Output/Row Stationary 等数据流的流量与代价如何比较?
SCALE-Sim Systolic Array 面向矩阵/卷积阵列的轻量周期估计 阵列尺寸与 Dataflow 如何影响利用率和带宽?

工具不是按名气选择

研究 A100 Warp Scheduler 或 Cache 行为时,Timeloop 的抽象通常过高;搜索 NPU 的 PE 阵列、Buffer 和 Dataflow 时,用完整 GPU 周期模拟又过重。先写清“要比较的设计变量”和“必须可信的指标”。

精度—速度—可解释性三角

flowchart TB
    Q{研究问题} --> D[需要周期级争用?]
    D -->|否| A[解析模型 / Roofline]
    D -->|是| P[时序或 Trace 模型]
    P --> OS[需要 OS / 驱动交互?]
    OS -->|否| SE[应用/Kernel 级模拟]
    OS -->|是| FS[Full-System 模拟]
    A --> V[用少量实测校准]
    SE --> V
    FS --> V

选择最小充分模型有三个好处:

  • 速度:更容易覆盖不同形状、Mapping 与硬件配置。
  • 可解释性:输出能回到明确的流量、资源占用和排队原因。
  • 可验证性:较少的自由参数更容易通过微基准校准。

一个可复用的实验记录

项目 必须记录
问题 假设、对照组、唯一主要变量
Workload 模型/Kernel、输入形状、精度、软件版本、Trace 来源
架构 核心/阵列、频率、Cache/Buffer、带宽、拓扑、调度策略
仿真 工具 commit、配置文件、Warmup/ROI、随机种子
输出 周期、吞吐、流量、命中率、利用率、能耗及单位
校准 对应硬件、计时方法、误差分布与异常点
结论 哪些结论可推广,哪些只对当前模型和输入成立

延伸阅读