手把手建立Roofline模型(CPU)

Roofline模型原理

Roofline模型是用来建立当前计算平台在不同的计算强度(Operational Intensity)下能够达到的理论计算上限的数学模型。论文和基础理论和应用 Roofline Model与深度学习模型的性能分析 。本文旨在教授如何根据当前开发环境机器建立该模型,并简单的介绍如何根据算法计算OI(计算强度)。

需要准备的硬件参数

对于CPU而言,我们需要一下参数:

频率内存带宽(double)Avx512 UnitFma
Intel® Xeon® Gold 61482.7GHz39.74GB/s22

其中Avx512、Fma并非是必备参数。

查询CPU相关指标方法或网站:

计算相关参数:
当前CPU的理论峰值:
理论性能峰值 = 频率 ∗ A V X 512 数量 ∗ F M A 32 / 64 理论性能峰值 ={频率*AVX512数量*FMA \over 32/64} 理论性能峰值=32/64频率AVX512数量FMA

AVX和FMA并不是必要参数,32/64取决于当前处理问题是单精度(32)或者双精度(64)

由上述公式,我们可以计算出Xeon Gold 6148的计算双精度理论性能峰值为2.7GHz*2(avx)*2(FMA)/64=86.4Gfplos。

计算当前内存带宽:

通常情况下我们可以通过 wikichip 搜索到,当然也可以通过 StreamBenchmark 程序获取。

建立Roofline模型

image

Roofline模型中的相关参数公式如下,并计算Xeon Gold 6148 的参数:

  • π = 理论性能峰值 \pi=理论性能峰值 π=理论性能峰值 ,根据上文内容,我们已经计算出当前CPU的理论性能峰值就是86.4Gflops。
  • β = 理论内存带宽 \beta=理论内存带宽 β=理论内存带宽 ,上一章节有关于理论内存带宽获取方式,当前CPU的值为39.74Gflops。
  • I m a x = π β I_{max} = {\pi \over \beta} Imax=βπ ,显然易得当前值为2.17。

根据当前算法计算OI

访存密集型算法

void saxpy(double *a,double * b,double* c,int n,int s)
{
    for(int i=0;i<n;++i){
        a[i]=b[i]*s+c[i];
    }
}

分析程序的AI

该程序循环内做了一次乘法和一次加法,读取了三个数据,已知操作的数据都为64位浮点数,那么 O I = 2 ∗ N 8 ∗ 3 ∗ N = 1 12 OI={2*N \over 8*3*N}={1 \over 12} OI=83N2N=121。根据公式 F L O P S = O I × B W ( b o u n d w i t d h ) FLOPS=OI \times BW(bound witdh) FLOPS=OI×BW(boundwitdh) 可得当前的算法的理论峰值为~3.3Gflops。实际测试结果为2.4Gflops,存在可能优化的空间。

运算密集型算法

最简单的运算密集型程序为矩阵乘法 。这里就不具体算法实现展示。直接分析程序的OI,假设矩阵的的大小为 M M M ,矩阵乘需要加载两次矩阵,并写入一次矩阵,那么总的数据加载读取量为 3 × M × M 3 \times M \times M 3×M×M ,矩阵乘的每个元素需要需要进行 M M M 次乘操作和 M − 1 M-1 M1 次加操作,因此,计算总量为 2 ∗ ( M − 1 ) × M 2 2*(M-1) \times M^2 2(M1)×M2 ,当不考虑数据是64位浮点时,可得 O I = 2 ∗ ( M − 1 ) 3 ∗ 8 OI={2*(M-1) \over 3*8} OI=382(M1) 。当矩阵大小大于40时,对于当前CPU输入计算密集型程序,可达到的理论峰值为86.4Gflops。

优化方式

论文给出了一些可以优化的方式:

  • 针对访存密集型程序,可以通过soft perfetch等技术优化。
  • 针对计算密集型程序,可以通过SIMD等技术优化。

image

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值