Roofline模型(一):概念、基本公式、图像分析

这篇具有很好参考价值的文章主要介绍了Roofline模型(一):概念、基本公式、图像分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Roofline模型

参考文献:

Samuel Williams, Roofline Performance Modeling for HPC and Deep Learning Applications, https://crd.lbl.gov/assets/Uploads/S21565-Roofline-1-Intro.pdf

YouTube English Presentation:Roofline Hackathon 2020 part 1 and 2 - YouTube

引入:什么是较好的性能评价模型?

roofline模型,并行计算,人工智能,并行计算

  • 1、假设在GPU上对内核的循环测试进行性能分析,我们对不同的loop nest得到了随机的flop rates,有的很高,有的很低,这意味着只用GFLOP/s去评价性能可能有失偏颇

roofline模型,并行计算,人工智能,并行计算

  • 2、假设我们把某CPU代码移植到了Nvida GPU或者是AMD GPU中,将原CPU代码作为baseline(绿色),去对比移植后的代码性能(灰色)提升了多少,然后发现在有的循环中提升了非常多(例如第三根柱子、最后一根柱子),有的循环中只提升了一点点(例如第6根柱子),也不能很好的评价性能。

    那么什么是“好的”性能?(GPU为例)

    两个基本评价标准:

    1、能够在吞吐量有限的情况下运行

    ​ not sensitive to Amdahl effects, D2H/H2D transfers, launch overheads, etc…

    ​ 对于阿达姆效应不敏感、不会有连续的性能瓶颈;没有频繁的主机(Host)与设备内存(Device)之间的数据交换,保持尽量少的数据交换,使时间尽可能花在GPU计算上;启动开销尽量小,避免启动一堆很小的kernel(例如一个kernel只计算几微秒),把时间浪费在launch kernel上

    2、充分利用GPU的计算以及访存带宽能力

    总之,我们需要一个定量的性能评价模型,而不是定性的类似“性能不错”这样的评价。例如,达到了GPU计算峰值的80%、利用了70%的访存带宽等。

什么是roofline模型?

  • roofline模型是一个面向吞吐量的性能模型
  • 关注“率(rates)”而不是时间(time),例如flop rate(GFLOP/s)、bytes per second rate(GB/s)
  • 与架构无关,可以应用于CPU、GPU、DCU、Google TPU、FPGA等等

怎样使用roofline模型分析性能?

(DRAM) roofline model简化模型

首先我们对代码运行的计算机架构进行简单建模:

roofline模型,并行计算,人工智能,并行计算

首先假设当数据位于Cache中时(local data),SM通常可以达到计算能力峰值(此处举例为GFLOP/s)。然假设在某数据并行程序中,所有的SMs运行时都是负载均衡的,将它们合并,进行进一步简化:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8V4Qwj4-1673586721407)(C:\Users\dly2211480\AppData\Roaming\Typora\typora-user-images\image-20230113094915163.png)]

最后假设有足够的Cache空间以及访存带宽,即性能不会因为Cache空间不足以及访存带宽不够而被影响,基于此将模型再次简化:

roofline模型,并行计算,人工智能,并行计算

对于简化后的模型来说,能够影响性能的只有我们写的代码能算多快以及在主机端和设备端之间传输数据的速度有多快。我们将上面的模型叫做DRAM roofline model。

(DRAM) roofline model基本公式

假设数据传输时间和运算时间可以完美重叠,那么我们的代码耗时应为:
 Time  = max ⁡ {  #FP ops  /  Peak GFLOP/s   #Bytes  /  Peak GB/s  \text { Time }=\max \left\{\begin{array}{l} \text { \#FP ops } / \text { Peak GFLOP/s } \\ \text { \#Bytes } / \text { Peak GB/s } \end{array}\right.  Time =max{ #FP ops / Peak GFLOP/s  #Bytes / Peak GB/s 
 #FP ops  /  Peak GFLOP/s  \text { \#FP ops } / \text { Peak GFLOP/s }  #FP ops / Peak GFLOP/s 是理论计算时间,即浮点操作数量除以峰值计算速度,  #Bytes  /  Peak GB/s  \text { \#Bytes } / \text { Peak GB/s }  #Bytes / Peak GB/s 是理论访存时间,即需要从DRAM中存入以及读取的数据总量的Bytes除以DRAM峰值带宽。

前面提到roofline模型主要关注“率”,因此对上面公式进行变形,得到:
 #FP ops   Time  = min ⁡ {  Peak GFLOP/s   (#FP ops  /  #Bytes)  ∗  Peak GB/s  \frac{\text { \#FP ops }}{\text { Time }}=\min \left\{\begin{array}{l} \text { Peak GFLOP/s } \\ \text { (\#FP ops } / \text { \#Bytes) } * \text { Peak GB/s } \end{array}\right.  Time  #FP ops =min{ Peak GFLOP/s  (#FP ops / #Bytes)  Peak GB/s 
即:
 GFLOP/s  = min ⁡ {  Peak GFLOP/s  A I ∗  Peak GB/s  \text { GFLOP/s }=\min \left\{\begin{array}{l} \text { Peak GFLOP/s } \\ A I^* \text { Peak GB/s } \end{array}\right.  GFLOP/s =min{ Peak GFLOP/s AI Peak GB/s 
上面的公式就是roofline模型的基本公式,其中AI(Arithmetic Intensity)=FLOPs/Bytes=计算量/访存量,表示计算密度。当代码的计算量远大于访存量,我们说他是计算密集型的,当访存量远大于计算量,则说他是访存密集型的。

(DRAM) roofline model图像

roofline模型,并行计算,人工智能,并行计算

根据  GFLOP/s  = min ⁡ {  Peak GFLOP/s  A I ∗  Peak GB/s  \text { GFLOP/s }=\min \left\{\begin{array}{l} \text { Peak GFLOP/s } \\ A I^* \text { Peak GB/s } \end{array}\right.  GFLOP/s =min{ Peak GFLOP/s AI Peak GB/s ,以AI(计算密度)为横坐标,FLOP/s(可达到的浮点性能)为纵坐标,可得出roofline模型图像(因图像长得像屋顶所以叫roofline模型)。蓝色段中,性能受限于理论带宽(即斜率,Peak GB/s),在粉色段中,性能受限于浮点计算峰值性能(Peak GFLOP/s)。图中的转折点的横坐标 称作“Machine Balance”,其表征了硬件架构的特点,而Arithmetic Intensity(计算密度)表征了我们的代码/应用的特点。

roofline模型,并行计算,人工智能,并行计算

我们大致可以把图像分为5个区域,粉色线以上和蓝色线以左的区域是程序无论如何都无法达到的性能,因为它意味着超过了计算机的峰值计算性能/访存带宽。淡蓝色区域(计算密度小于Machine Balance点)是性能较好的访存密集型程序,这部分程序的访存带宽利用率较高(可能50%或更高),评价访存密集型程序的指标主要选用访存带宽;淡粉色区域(计算密度大于Machine Balance点)是性能较好的计算密集型程序,有较好的数据重用率与数据局部性,这部分程序的浮点性能较高(可能50%或更高),评价计算密集型程序的指标主要选用浮点性能。最后就是可能带宽与浮点性能都低于50%峰值性能的poor performance,如果程序性能处于这个部分,需要考虑优化算法提高性能,达到粉色或者蓝色区域。

使用roofline模型分析性能示例

对于文章一开始的性能分析图(随机输出kernel性能),我们将其重新组织,计算每个kernel的计算密度,并以计算密度为横坐标,重新排列得到:

roofline模型,并行计算,人工智能,并行计算

将其与roofline模型相比较:

roofline模型,并行计算,人工智能,并行计算

那些贴近于roofline的kernel较好的利用了计算资源(绿色点点),而那些远离roofline的kernel(红色点点)则是我们重点需要去优化、提高计算资源利用率的。这里需要注意,对比FLOP/s很低的kernel(例如第一个绿点),红点虽然看起来FLOP/s更高,但是比绿点更有优化性价比。因为绿点已经很接近roofline模型了,无法突破机器能提供的最大资源,可能需要费很大的劲儿才能提高一点点(如果不改变计算密度的话);而红点离roofline还有较远距离,可通过不断优化访存函数、计算函数来提高访存带宽/浮点计算性能利用率。除此之外,如果想要提高FLOP/s很低但是又比较接近roofline的kernel,可以通过改进计算方法/减少数据传输时间来提高计算密度(例如提高空间局部性、提高cache命中率、改进数据结构、数据类型)。

roofline模型,并行计算,人工智能,并行计算

有哪些低于roofline的原因?

见下篇:Roofline模型(二):有哪些性能低于roofline的原因?文章来源地址https://www.toymoban.com/news/detail-766536.html

到了这里,关于Roofline模型(一):概念、基本公式、图像分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HarmonyOS】Stage 模型 - 基本概念

    如图1所示: 图1 从项目结构来看,这个应用的内部包含了一个子模块叫 entry ,模块是应用的基本功能单元,它里面包含源代码、资源、配置文件等。 像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类: 第一类就像 entry 这样,它的内部其实是开发这个应

    2024年04月27日
    浏览(44)
  • 神经网络:基本概念、模型与技术

    神经网络:基本概念、模型与技术 引言 在近年来,人工智能领域取得了显著的进步,其中最引人注目的成就之一就是神经网络。神经网络是一种模拟人脑工作机制的算法,以其出色的学习和识别能力,对各个领域的实际问题产生了深远影响。在本篇博客中,我们将深入探讨

    2024年02月09日
    浏览(40)
  • HarmonyOS Stage模型基本概念讲解

    本文 我们来说harmonyos中的一种应用模型 Stage模型 官方提供了两种模型 一种是早期的 FA模型 另一种就是就是 harmonyos 3.1才开始的新增的一种模型 Stage模型 目前来讲 Stage 会成为现在乃至将来 长期推进的一种模型 也就是 无论是 现在的harmonyos 4.0 乃至 之后要发布的 harmonyos next

    2024年02月21日
    浏览(39)
  • Python爬虫数据分析的基本概念

    Python爬虫数据分析是一种利用Python编程语言和相关的库来获取互联网上的数据,并对数据进行处理、分析和可视化的技术。Python爬虫数据分析技术在数据挖掘、商业智能、市场调研、舆情分析等领域都有广泛的应用。本文将介绍Python爬虫数据分析的基本概念、常用库和实战案

    2024年02月06日
    浏览(42)
  • 数据分析笔记:基本概念,常用图表,报告大纲

    对数据进行分析。 数据分析是为了 提取有用信息和形成结论 而对数据加以详细研究和概括总结的过程。 在实际工作中,帮助管理者 判断和决策 。 数据分析的基本步骤包括明确思路,制定计划、数据收集、数据处理、数据分析、数据显示和报告撰写。 明确思路 :分析的目

    2024年02月06日
    浏览(42)
  • Doris(二) -- 基本概念和数据表模型

    数据类型 字节 范围 TINYINT 1 字节 -2^7 + 1 ~ 2^7 - 1 SMALLINT 2 字节 -2^15 + 1 ~ 2^15 - 1 INT 4 字节 -2^31 + 1 ~ 2^31 - 1 BIGINT 8 字节 -2^63 + 1 ~ 2^63 - 1 LARGEINT 16 字节 -2^127 + 1 ~ 2^127 - 1 FLOAT 4 字节 支持科学计数法 DOUBLE 12 字节 支持科学计数法 DECIMAL[(precision, scale)] 16 字节 保证精度的小数类型。默

    2024年02月06日
    浏览(39)
  • [桌面运维] 显示器 色准,色域,色深,分辨率,带宽,刷新率的基本概念,图像呈现的基本原理

    ⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 🙉联系作者🙈by QQ:813942269🐧 🌈致亲爱的读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事

    2024年02月13日
    浏览(45)
  • R语言绘图:实现数据点的线性拟合,进行显著性分析(R-squared、p-value)、添加公式到图像

    最近在做关于数据点线性拟合相关的研究,感觉R语言在这方面很方便,而且生成的图片很漂亮,所以在这里和大家分享一下代码。 这是别人所绘制的拟合图像,很漂亮,自己也用iris鸢尾花数据集进行一个线性拟合看看: 拟合线性模型最基本的函数就是 lm() ,格式为:myfit

    2024年02月11日
    浏览(35)
  • 南京观海微电子---时序分析基本概念(二)——保持时间

    1.  概念的理解 以上升沿锁存为例,保持时间(Th)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如下图所示,一个数据要在上升沿被锁存,那么这个数据需要在时钟上升沿到来后的保持时间内保持稳定。 保持时间是对触发器而言,以能够稳定准确的锁存

    2024年01月23日
    浏览(37)
  • 【软件测试】软件测试的基本概念和开发模型

    在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 软件测试的基本概念有3个,分别是 需求,测试用例和BUG. 这里的需求还可以分为 用户需求和软件需求 ,用户需求: 简单理解为甲方提出的需求

    2023年04月15日
    浏览(120)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包