Roofline: An Insightful Visual Performance Model for Floating-Point Programs and Multicore Architectures

发表时间: 2009-04 · Communications of the ACM 52(4) (UC Berkeley)

原文: https://people.eecs.berkeley.edu/~kubitron/cs252/handouts/papers/RooflineVyNoYellow.pdf

作者/机构: Samuel Williams, Andrew Waterman, and David Patterson, Parallel Computing Laboratory, U.C. Berkeley

速读

一句话结论 本文提出了一个名为 Roofline 的可视化性能模型,通过将浮点计算性能与片外内存流量联系起来,直观地界定了程序在特定多核架构下的性能上限与瓶颈,并为代码优化提供了明确的路径指导。

要解决什么问题 随着行业向多核架构转型,处理器设计出现了同构与异构、多线程、本地存储等多种路线,这种硬件多样性极大地增加了软件优化的复杂性。现有的随机分析模型和统计性能模型虽然能够准确预测多处理器上的程序性能,但它们往往过于复杂,对非专家不友好,且很少能为程序员、编译器编写者或架构师提供关于如何改进性能的实质性见解。具体而言,开发者在面对性能不佳的程序时,难以判断当前的卡点究竟是处理器的浮点计算能力不足,还是片外内存带宽受限,也无法量化不同优化手段(如改进指令级并行、优化缓存命中率、使用软件预取等)的潜在收益。缺乏一个像缓存 3Cs 模型那样简单直观、能统一指导边界与瓶颈分析的工具,导致多核时代的软硬件协同优化缺乏方向。

怎么做的 Roofline 模型的核心思路是基于片外内存带宽通常是性能瓶颈这一洞察,在二维对数坐标系中将处理器的计算能力与内存系统的带宽直观地结合起来。为了实现这一点,作者定义了一个关键度量衡即计算强度,代表每次 DRAM 访问所执行的浮点运算次数(Flops/Byte)。它刻画的是经过缓存层次过滤后,主存与缓存之间的真实数据流量,从而巧妙地将缓存优化效果纳入了模型。模型的可视化由几个关键部件构成。首先是决定性能上限的屋顶,它由两条线取下界构成:一条代表处理器峰值浮点性能的水平线,另一条代表峰值内存带宽的斜线。其定义公式为:$$ \text{可达 GFlops/sec} = \min(\text{峰值浮点性能}, \text{峰值内存带宽} \times \text{计算强度}) $$ 其次是屋脊点,即水平线与斜线的交点。该点的 X 坐标代表了在该硬件上达到峰值性能所需的最低计算强度,位置越靠右,说明压榨出硬件全部算力的难度越大。最后是天花板,在屋顶下方,模型根据不同的优化技术绘制了多条次级边界。如果程序落在水平区域即计算瓶颈,模型会提示进行提高指令级并行度、应用 SIMD 或平衡浮点操作等优化;如果落在倾斜区域即内存瓶颈,则提示进行单位步长访问重构、内存亲和性优化或软件预取。天花板之间的高度差直接量化了该项优化的潜在收益。此外,通过消除缓存的冲突和容量未命中,可以提高程序的计算强度,使其在图表上向右移动,从而可能跨越屋脊点,将内存瓶颈转化为计算瓶颈。

效果如何 实验在四种架构迥异的双路多核计算机上展开:采用复杂核心且依赖前端总线的 Intel Xeon、集成 L3 缓存的 AMD Opteron X4、支持高度多线程且内存带宽极高的 Sun UltraSPARC T2+,以及采用异构设计和本地存储的 IBM Cell QS20。测试任务选取了科学计算中的四个典型核心:稀疏矩阵向量乘法、格子玻尔兹曼磁流体动力学、模板计算和三维快速傅里叶变换,并使用自动调优器生成最优代码。由于本文是提出分析模型而非具体算法,实验主要验证模型预测与实际性能的吻合度。结果显示,所有 16 个核心与计算机组合的实际性能均准确落在了 Roofline 模型预测的上下天花板之间。模型清晰地揭示了不同架构的特性:Xeon 的屋脊点高达 6.7,意味着极难达到峰值算力,16 个测试案例中有 15 个在 Xeon 和 X4 上受限于内存带宽;而 T2+ 的屋脊点仅为 0.33,编程最容易,其测试案例中计算受限与内存受限各占一半。模型的局限性在于,天花板的高度需要针对每台计算机预先通过微基准测试测量一次;且对于乘加操作难以自然平衡的计算核心,需要单独调整浮点平衡天花板的位置。

A1 主要贡献

本文针对当前多核处理器设计多样化给程序员、编译器编写者和架构师带来的挑战,提出了一个易于理解的可视化性能模型——Roofline模型。随着行业向多核架构转型,传统同构设计的共识不复存在,出现了诸如“多而简”核与“少而精”核、多线程、本地存储替代缓存等多种设计,这加剧了软件优化的难度。因此,一个能够提供性能指导的简洁模型尤为重要。

核心问题与研究目标:

创新点(Roofline模型):

  1. 核心理念: 该模型基于一个关键洞察——在可预见的未来,片外内存带宽通常是性能的瓶颈资源【23,D. Patterson, “Latency Lags Bandwidth,” CACM, 2004】。因此,模型的核心是将处理器性能与片外内存流量联系起来。
  2. 关键度量衡“计算强度” (Operational Intensity): 定义为每次DRAM访问所执行的浮点运算次数(Flops/Byte)。它衡量的是经过缓存层次过滤后,在缓存与主存之间的流量,而非处理器与缓存之间的流量。这使得模型的边界和瓶颈分析能够包含计算机的内存优化效果。
  3. 可视化表示: 模型采用对数-对数坐标图,Y轴为可达到的浮点性能(GFlops/sec),X轴为计算强度。
    • 性能上限(“屋顶”): 由两条线构成:一条代表处理器峰值浮点性能的水平线,和一条代表峰值内存带宽的斜线。一个计算核心(kernel)的性能上限由这两条线的下界决定,即可达 GFlops/sec = Min(峰值浮点性能, 峰值内存带宽 × 计算强度)
    • 计算/内存瓶颈判断: 根据一个核心的计算强度,其性能点落在屋顶的水平部分(计算瓶颈)或倾斜部分(内存瓶颈)。
  1. “屋脊点” (Ridge Point): 水平线与斜线的交点。该点的X坐标代表了要达到系统最高性能所需的最低计算强度。屋脊点的位置揭示了在该计算机上实现峰值性能的难度。
  2. 优化指导(“天花板” Ceilings): 在“屋顶”之下,可以加入多个代表不同优化技术所能达到的性能水平的“天花板”。这些天花板为程序员指明了应当采取何种优化措施(如改进ILP/SIMD、内存亲和性等)以及优化的潜在收益(天花板之间的性能差距)。

本文通过在四种不同的多核计算机上对四个关键浮点计算核心进行分析,验证了Roofline模型的有效性,证明了它能够为并行软件和硬件的性能改进提供深刻的洞察。

A3 背景知识/关键Observation/设计原则

2. 性能模型

3. ROOFLINE模型

图1. (a) 左图为AMD Opteron X2的Roofline模型,(b) 右图为Opteron X2与Opteron X4的对比。
图1. (a) 左图为AMD Opteron X2的Roofline模型,(b) 右图为Opteron X2与Opteron X4的对比。

A2 方法细节

4. 为模型添加天花板

图2. 带有天花板的Opteron X2 Roofline模型。
图2. 带有天花板的Opteron X2 Roofline模型。

5. 将3Cs模型与计算强度联系起来

A4 实验环境

6.1 四种不同的多核计算机

本文选择了四种各具特色的双路多核计算机系统进行模型演示,其关键特性如表1所示。

表1:本研究中使用的四种多核计算机的特性。
表1:本研究中使用的四种多核计算机的特性。

6.2 四种不同的浮点核心

本文没有选择标准并行基准套件(如Parsec【5】或Splash-2【30】),而是受科学计算专家Phil Colella【10】的启发,从他提出的对未来科学与工程至关重要的“七个矮人”中选取了四个核心进行演示。这些核心在较高层次上定义,允许跨实现进行行为推理。本文使用了针对每个核心的自动调优器【12】【25】【26】来生成针对特定多核计算机的最佳代码。

表2:本研究中使用的四个浮点核心。
表2:本研究中使用的四个浮点核心。

A4 实验结果

6.3 Roofline模型与结果

图3和图4展示了四台计算机的Roofline模型,并标出了各个核心优化后的性能点(红色X)和计算强度(粉色虚线)。由于SpMV核心天然地实现了乘法和加法操作的平衡,而其他核心则难以做到,因此针对Xeon、X4和Cell,本文为SpMV和其他三个核心分别绘制了不同的图(乘加平衡天花板位置不同)。T2+由于硬件限制,只有一个统一的Roofline图。

6.3.1 稀疏矩阵向量乘法 (SpMV)

6.3.2 格子玻尔兹曼磁流体动力学 (LBMHD)

6.3.3 模板计算 (Stencil)

6.3.4 三维快速傅里叶变换 (3-D FFT)

表3:四个核心在四台多核计算机上使用的优化技术摘要。
表3:四个核心在四台多核计算机上使用的优化技术摘要。
图3. Intel Xeon, AMD Opteron X4, 和 IBM Cell 的Roofline模型 (见表1)。
图3. Intel Xeon, AMD Opteron X4, 和 IBM Cell 的Roofline模型 (见表1)。
图4. Sun UltraSPARC T2+的Roofline模型。
图4. Sun UltraSPARC T2+的Roofline模型。

6.3.5 生产力与性能

6.3.6 Roofline模型演示总结

表4总结了每个核心-计算机组合的性能、带宽以及其所处的性能天花板区间。

表4:Roofline模型的性能边界验证。
表4:Roofline模型的性能边界验证。

A7 补充细节

7. 关于ROOFLINE的谬误

A5 结论

从串行计算到并行计算的巨变增加了程序员在制作正确、高效、可扩展和可移植软件时必须面对的计算机多样性【4】。本文描述了一个简单而可视化的模型,以帮助观察哪些系统能与重要的核心良好匹配,或者反过来看,如何改变核心代码或硬件以良好地运行所需的核心。对于不能完全放入缓存的浮点核心,我们展示了计算强度——即每从DRAM传输一个字节所执行的浮点运算次数——对于核心和多核计算机都是一个重要参数。

我们将该模型应用于来自“七个矮人”【10】【4】的四个核心,在四种近期多核设计上进行了验证:AMD Opteron X4、Intel Xeon、IBM Cell和Sun T2+。屋脊点——达到最大性能所需的最小计算强度——被证明是比时钟频率或峰值性能更好的性能预测指标。Cell在这些核心上提供了最高的性能,但T2+是实现其最高性能最容易的计算机。一个原因是T2+的Roofline模型屋脊点是最低的。

仅仅是图形化的Roofline就能提供关于实现计算机峰值性能难度的洞察,因为它能清晰地揭示计算机何时处于不平衡状态。两种x86计算机的计算屋脊点分别为4.4和6.7——意味着访问DRAM的每个8字节操作数需要35到55次浮点运算——然而表4中16个核心与计算机组合的计算强度范围仅从0.25到1.64,中位数为0.60。如果架构师希望程序能在他们的新设计上达到峰值性能,就应该牢记屋脊点。

我们使用微基准测试来测量屋顶线和天花板,但我们也可以使用性能计数器(见附录A.1和A.3)。事实上,我们相信性能计数器和Roofline模型之间可能存在协同关系。自动创建Roofline模型的需求可以指导设计者在面对数百个候选指标但硬件预算有限时,应该收集哪些指标【6】。

我们相信Roofline模型可以为其他类型的多核系统(如向量处理器和GPU)、其他核心(如排序和光线追踪)、其他计算指标(如每秒成对排序次数和每秒帧数)以及其他流量指标(如L3缓存带宽和I/O带宽)提供洞察。我们邀请其他人加入我们,共同探索Roofline模型的有效性。

A6 附录

附录A可在CACM网站上在线找到:http://cacm.acm.org