计算机体系结构 32:Roofline 与矩阵数据复用

核心问题

分块矩阵乘法减少了某一层级的数据搬运,性能就一定提高吗?Roofline 先用运算强度把计算峰值和带宽上界放在同一坐标系中,但模型上界不是实测性能点;字节流量还必须注明针对 DRAM、缓存还是片上 scratchpad。

附件:32-roofline.json。

范围与证据等级

证据等级为手算。题设峰值为 128 GFLOP/s,带宽为 32 GB/s。两个模型点的运算强度分别是 0.25 和 8 FLOP/byte,均未在当前主机或加速器上测量。

Williams、Waterman 与 Patterson 的 Roofline 模型用下式表达可达到性能的上界:

1
attainable <= min(peak compute, peak bandwidth × operational intensity)

公式中的 peak 和 bandwidth 必须来自同一机器与相符的测量口径;operational intensity 的字节分母也要固定内存层级。

核心案例:同一计算量,不同数据复用

朴素模型点的运算强度为 0.25 FLOP/byte,带宽屋顶给出 32 × 0.25 = 8 GFLOP/s,低于 128 GFLOP/s 的计算屋顶。分块模型点把强度提高到 8 FLOP/byte,带宽乘积为 256 GFLOP/s,最终仍由 128 GFLOP/s 的计算屋顶截断。

这两个点只表达数据复用可能让瓶颈从带宽侧移向计算侧。真实实现还会受指令组合、并行度、缓存容量、对齐和调度开销影响,因此实测点通常落在屋顶线下。

模式:先固定层级,再算强度

1
运算强度(层级 L) = 完成任务的 FLOP / 穿过层级 L 的字节

CPU cache blocking、GPU shared memory tiling 和矩阵加速器片上复用都能使用这个模式。层级变化时必须重新计算分母,不能沿用同一个强度值。

验收结果

本批脚本退出 0。两个模型点分别得到 8 与 128 GFLOP/s 的题设上界,输出中的 measured 均为 false。当前没有矩阵 kernel、硬件峰值校准或带宽实测点。

练习

带宽改为 16 GB/s 时,两个点的上界分别是多少?

同一 kernel 的 DRAM 运算强度和 L1 运算强度为什么可能不同?

模式速查

输入 在模型中的作用 常见误用
峰值计算能力 水平屋顶 当成应用实测性能
峰值带宽 斜线斜率 与别的机器参数混用
运算强度 决定模型位置 不注明字节流量层级

一手参考资料