0
点赞
收藏
分享

微信扫一扫

利用roofline模型分析异构系统算力VS带宽


关于roofline模型的起源来源于一篇论文

利用roofline模型分析异构系统算力VS带宽_java

理论基础:

利用roofline模型分析异构系统算力VS带宽_java_02

两边取对数:

\\ \mathbf{log(FLOPS)=log(AI\times BW) = log(AI) + log(BW) =>y(log(FLOPS))=x(log(AI)) + b(log(BW))}=>y=x+b

利用roofline模型分析异构系统算力VS带宽_数据库_04

利用roofline模型分析异构系统算力VS带宽_java_05

roofline模型用于描述在计算平台的算力和带宽的限制下,程序所能达到的理论性能上界。水平线和对角线为这个边界模型命名。Roofline会根据内核的操作强度设置其性能的上限。如果我们把操作强度想象成一根柱子撞上了屋顶,要么它撞上了屋顶的平部分,这意味着性能受计算限制,要么它撞上了屋顶的倾斜部分,这意味着性能最终受内存限制。

请注意脊点,即斜屋顶和水平屋顶的交汇处,提供了对计算机整体性能的洞察。脊点的横坐标是实现最大性能所需的最小操作强度。如果脊点非常靠右(带宽小),那么只有操作强度非常高的核才能实现该计算机的最大性能。如果它在最左边,那么几乎任何内核都可能达到最大性能。脊点暗示了程序员和编译器作者达到峰值性能的困难程度。

利用roofline模型分析异构系统算力VS带宽_浮点运算_06

利用roofline模型分析异构系统算力VS带宽_数据库_07

利用roofline模型分析异构系统算力VS带宽_浮点运算_08

如上图,为roofline模型的示意图,有三个重要概念:

  1. 算力:每秒所完成的浮点运算次数,单位为FLOP/s或GFLOP/s
  2. 带宽:每秒所完成的内存读取量,单位为Byte/s或GByte/s
  3. 计算密度:又称访存比,是算力与带宽的比值,即每字节读取所完成的浮点运算量,单位为FLOP/Byte

可以看到,roofline模型的纵轴为可达算力:

                               Attainable GFLOP/s=min{Peak GFLOP/s,AI∗BW}

其中A I AIAI为访存比,B W BWBW为带宽。roofline模型分为两个阶段:

  • 第一阶段为带宽限制(Bandwidth-bound),该阶段随着访存比的增大,可达算力也会增大,但是无法到达峰值算力,是因为带宽的限制(假如带宽无限大,即斜率无限大,那就可以到达峰值算力)。这个时候,对于用户来讲,就可以买一个更便宜一些的CPU,因为强大一些的CPU算力发挥不出来。
  • 第二阶段为算力限制(Compute-bound),该阶段无论访存比怎么增大,可达算力都为峰值算力。这个时候,就可以购买一些便宜一些的内存颗粒,因为即便使用高速内存,性能也发挥不出来。

如果把带宽比作水管,把算例比作流过水管的水流,可以形象展示如下:

利用roofline模型分析异构系统算力VS带宽_服务器_09

针对这种划分,我们大概可以将模型分为两类:

1.算力未发挥型的,对应爬坡图.

2.带宽未发挥型的,对应roof图.

3.在转折点处,既不浪费带宽,也不浪费算力,算是一个平衡,是不是纳什均衡?

原始论文

下图中带有两个核心的Opteron X2与其后继产品Opteron X4的四个核心进行比较。为了简化电路板设计,它们共用同一个插座。因此,它们具有相同的DRAM通道,因此可以具有相同的峰值内存带宽,尽管X4的预取性能更好。除了使核数翻倍之外,X4每个核的峰值浮点性能也提高了一倍:X4核可以在每个时钟周期发出两个浮点SSE2指令,而X2核可以每隔一个时钟发出两个。由于时钟速率略快(X2为2.2 GHz, X4为2.3 GHz),因此在相同的内存带宽下,X4的峰值浮点性能是X2的4倍多一点。

图中比较了两个系统的Roofline模型。正如预期的那样,Opteron X2的脊点从1.0右移到Opteron X4的4.4。因此,要想在X4中获得性能提升,内核的操作强度需要大于1。

利用roofline模型分析异构系统算力VS带宽_浮点运算_10

下图展示了Roofline模型添加了天花板。虽然较高的天花板没有标记为较低的优化,但它们暗示:要突破一个天花板,您需要已经突破下面的所有天花板。图2a显示了如果浮点运算组合不平衡,计算“上限”为8.8 GFlops/秒,如果缺少提高ILP或SIMD的优化,则为2.2 GFlops/秒。图2b显示了没有软件预取的内存带宽上限为11 GBytes/sec,没有内存亲和性优化的内存带宽上限为4.8 GBytes/sec,只有单位跨步优化的内存带宽上限为2.7 GBytes/sec。(由于坐标图单位为LOG后的带宽和AI,所以其斜率并不代表BW,斜率固定为1.此时带宽为Y轴上的截距).

图2c将其他两个图合并成一个图。内核的操作强度决定了优化区域,从而决定了要尝试哪些优化。图2c中间显示了计算优化和内存带宽优化重叠。选择这些颜色是为了突出重叠部分。例如,Kernel 2位于右边的蓝色梯形中,这意味着只处理计算优化。如果内核位于左下角的黄色三角形中,模型会建议只尝试内存优化。内核1位于中间的绿色(=黄色+蓝色)平行四边形中,这建议尝试两种类型的优化。注意,Kernel 1的垂直线低于浮点不平衡优化,优化2可以跳过。

利用roofline模型分析异构系统算力VS带宽_java_11

总结:

Roofline模型为性能提供了一个上限。假设您的程序在远低于它的Roofline的情况下执行。应该执行哪些优化,以什么顺序执行?我们利用这一工具指导执行哪些优化,我们可以将这些优化看作是适当的Roofline之下的“性能上限”,这意味着如果不执行相关的优化,就无法突破上限。

优化方法包括:

软件预取:使用软件预取。通常,最高的性能要求在运行中保持许多内存操作,这更容易通过预取来实现,而不是等待数据被程序实际请求。在某些计算机上,软件预取比单独的硬件预取提供更多的带宽

SIMD&ILP并发:充分利用CPU的数据并发能力和流水线的并发能力。

利用存储亲和力:略

重构单元步幅访问的循环:优化单元跨步内存访问涉及硬件预取,这将显著增加内存带宽。

两个平台的算力分析

利用roofline模型分析异构系统算力VS带宽_浮点_12

结束

举报

相关推荐

0 条评论