jasperzhong / cs-notes

CS认知体系
6 stars 0 forks source link

Roofline Model #9

Closed jasperzhong closed 3 years ago

jasperzhong commented 3 years ago

https://en.wikipedia.org/wiki/Roofline_model

https://zhuanlan.zhihu.com/p/34204282

今天了解到这个概念,发现极为有用. 必须彻底掌握.

jasperzhong commented 3 years ago

https://zhuanlan.zhihu.com/p/34204282

这篇文章讲得很清楚.

Roofline Model其实说的是: 程序在计算平台的算力和带宽两个限制下,所能达到的理论性能上界是多少?

  1. 计算平台的两个指标: 算力和带宽

    • 算力: 峰值性能, 单位 FLOPs/s
    • 带宽: 传输速度, 单位 Byte/s
    • 计算强度上限 = 算力 / 带宽, 单位 FLOPs/Byte. 即单位内存交换能进行多少计算.
  2. 模型的两个指标: 计算量和访存量

    • 计算量: FLOPs.
    • 访存量: byte.
    • 模型的计算强度: 计算量 / 访存量 (FlOPs/Byte)
    • 模型的理论性能: 每秒浮点运算次数 FLOPs/s

引用一句文章里的话, 我觉得非常精辟.

Roofline model解决的是: 计算量为A且访存量为B的模型在算力为C且带宽为D的计算平台所能达到的理论性能上限E是多少?

横轴是模型的计算强度, 纵轴是模型的理论性能. 这图非常经典. 因为形状类似于屋顶形态, 所以叫roofline. image

注意图中的拐点. 所对应的横轴坐标是计算平台的计算强度上限, 纵轴坐标是计算平台的峰值算力. 过了这一点, 这个模型就是compute-bound的,因为是计算平台的峰值算力限制了其不能进一步提高性能.

而在这个点左边,模型是memory-bound的. 而斜线的斜率大小正是计算平台的带宽 (斜率的量纲是byte/s).

这个所谓的bound都是指在纵轴(理论性能)上无法突破的原因.

而实际中的性能,因为种种因素,往往是在这个折线的下方.

文中给了一个具体案例分析,分析了VGG16和Mobilenet在单1080Ti上情况. (仅考虑前向传播)

image

可见,在这个计算平台上,VGG16是compute-bound的,而mobilenet是memory-bound的.

而如果考虑分布式训练,还需要传输gradients. 那时候情况可能会反过来.

jasperzhong commented 3 years ago

https://www.nersc.gov/assets/Uploads/Tutorial-ISC2019-Intro-v2.pdf

P25-P26讲两个例子非常不错.

jasperzhong commented 3 years ago

https://zhuanlan.zhihu.com/p/33693725

这篇也不错.

图中有一条折线,这个折线开始的时候是随着计算密度的增加而增加,最终会稳定在一个固定的performance上。这个意思是:当这个应用程序的计算密度大于一定值之后,将会变成一个受算术逻辑单元的计算量所限制的程序;而这个计算密度如果小于一定值,将会变成一个受存储器带宽所限制的程序。

这里折线的拐点非常重要。这个拐点跟硬件很相关,它实际上表示的是硬件的理论计算能力和它的内存带宽之间的一个比值。

jasperzhong commented 3 years ago

注意,上图中的折线其实是计算平台所决定的,拐点也是计算平台决定的. 对于具体的程序,我们可以计算出其理论的arithmetic intensity,并且可以测量出一个实际的performance (FLOPs/s),然后可以和理论值进行比较,看差多少.

jasperzhong commented 3 years ago

介绍TPU的paper有个图很不错. image