使用 LLVM 的调度模型计算吞吐量

主要观点:

  • 吞吐量(Throughput)在架构级性能分析中通常用每周期指令数(IPC)衡量,其逆运算即反向吞吐量也常用,它更接近一组指令完成所需时间除以指令级并行度。
  • LLVM 的调度模型是描述特定处理器中指令性能特征的大型数据库,包括延迟(Latency)、使用的硬件资源和在每个硬件资源上“占用”的周期数等属性,可通过这些属性推导指令的反向吞吐量。
  • 计算基本吞吐量时,可通过指令释放资源的周期(ReleaseAtCycle)来计算,当指令数量趋于无穷时,总周期数主要由最大的 ReleaseAtCycle 决定,即反向吞吐量为 max(ReleaseAtCycles)。
  • 当 AcquireAtCycle 不为 0 时,指令会在一段时间后才开始占用资源,形成资源段(resource segments),此时计算反向吞吐量需找到最右侧周期,即所有硬件资源中最大的 ReleaseAtCycle 与最小的 (AcquireAtCycle + M - ReleaseAtCycle) 的差值乘以指令数量 N,其中 M 为最大的 ReleaseAtCycle,i 为硬件资源索引,即 Inverse throughput = max(ReleaseAtCycle_i - AcquireAtCycle_i)。

关键信息:

  • 硬件资源可视为超标量处理器中的执行管道,AcquireAtCycle 是指令开始使用资源的周期,ReleaseAtCycle 是指令释放资源的周期。
  • 指令只有在所需的所有硬件资源都可用时才能发出。
  • 计算反向吞吐量时,当指令数量趋于无穷,延迟可忽略不计,主要考虑 ReleaseAtCycle 和资源段长度。

重要细节:

  • 通过具体例子展示了指令在不同硬件资源上的 AcquireAtCycle 和 ReleaseAtCycle 情况,以及如何根据这些信息计算总周期数和反向吞吐量。
  • 对于有资源段的指令,通过左右移动第二个指令来找到最右侧周期,其中涉及到计算最小的 (AcquireAtCycle + M - ReleaseAtCycle) 以确定常量因子 D,最终得出反向吞吐量的公式。
  • 介绍了写这篇文章的背景是 LLVM 的调度模型在处理 AcquireAtCycle 时的问题,以及对使用最长资源段作为反向吞吐量的讨论和解释。
阅读 9
0 条评论