欢迎光临散文网 会员登陆 & 注册

自编教材分享:第二章—程序性能的度量指标及优化流程

2023-08-30 19:45 作者:先进编译实验室  | 我要投稿


在进行程序优化之前,了解统一的程序性能度量指标以及常用的程序优化流程是十分有必要的,其中程序性能度量指标可以更好地帮助优化人员衡量程序的性能。本文主要分享程序性能的度量指标及优化流程。

程序性能的度量指标

程序性能的度量指标主要包括程序执行时间、计算与访存效率、吞吐量与延迟、加速比、Amdahl定律、Gustafson定律等指标。下面将一一介绍。

程序执行时间

程序的执行时间是判断程序性能优劣较为简单的方式之一,在使用相同计算设备且保证程序正确的前提下,程序运行时间越短意味着其性能越高效。

实际优化过程中,某些情况下需要对少量代码精确计时,采用普通的计时方法测试的结果误差可能较大,此时可利用嵌入汇编rpcc指令或多次执行后取平均值的方式尽量减少结果误差。


计算与访存效率

计算效率是指实测浮点性能与理论浮点峰值性能之比。而访存效率是指程序的有效访存带宽与存储器理论带宽之比,其中带宽是计算平台每秒内存交换量的最大值。

当程序的访存效率接近于1时,说明程序已经将整个存取器的带宽都利用了起来,与之对应的当访存效率远小于1,则说明存储带宽利用率较低,程序还有一定的访存优化空间。

吞吐量与延迟

吞吐量和延迟是衡量软件系统最常见的两个指标。但高吞吐量并不意味着低延迟,高延迟也不代表吞吐量变小,它们之间的关系并不是简单的一一对应。延迟测量的是用于等待的时间,广义来说,延迟可以表示所有操作完成的耗时,例如一次应用程序请求、一次数据库查询、一次文件系统操作等,可以表示从单击链接到屏幕显示整个页面加载完成的时间。

加速比

加速比speedup是指同一个任务在单处理器系统和并行处理器系统中运行消耗的时间的比率,用来衡量并行系统或程序并行化的效果,也可以用于衡量程序优化前后的效果,由于加速比是一个相对比值,因此在保证程序正确性的前提下加速比数值越大,代表着优化的效果越显著。 计算加速比的公式为:

%E5%8A%A0%E9%80%9F%E6%AF%94%3D%E4%BC%98%E5%8C%96%E5%89%8D%E7%9A%84%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%2F%E4%BC%98%E5%8C%96%E5%90%8E%E7%9A%84%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4

Amdahl定律

Amdahl定律将程序划分为可加速与不可加速两大部分,程序总的加速比S是一个关于程序中这两部分所占比例以及可加速部分性能加速程度的函数,用公式表示为:

S%3D1%2F((1-a)%2Ba%2Fn)

其中a为并行计算部分所占比例,n为并行计算部分获得的加速比。例如当a=50%,n=1.15时,S=1/((1-0.50) + (0.50/1.15)) = 1/(0.50 + 0.43) = 1.08。若应用程序有50%的代码是串行部分,那么该程序最终所能够达到的加速比上限为1/0.5=2。

Gustafson定律

对于某些不属于固定负载模式的问题不能使用Amdahl定律来解释。早在1988年Gustafson就发现了这个问题并提出了固定时间加速比模型,也就是经常提及的扩展加速比模型,通常被称为Gustafson定律,其公式为:

S%3Dn%2B(1-n)*f%3Df-n(f-1)

其中S表示扩展加速比,f表示处理器核的数量,n表示程序中串行部分的比例。

程序性能优化常用流程

在进行程序优化时之前,除需要了解程序性能常用的度量指标外,优化人员还需要大致了解程序优化的流程及具体实施步骤,从而可以更加高效顺利的开展程序优化。程序性能的常用优化流程如图1所示。

图1 程序性能优化常用流程


案例

以矩阵乘优化为例,假设优化后相比优化前需要达到1.5倍的性能目标。在确立性能目标后,需要对程序进行性能度量,获得程序运行时的各方面的数据。

初始

初始运行时间:

当计算规模是1024*1024的时候,测出来的数据中最耗时的函数是matrixmulti。所以主要针对这个函数进行优化。

Matrixmulti函数初始代码为:

循环交换

完成一次性能优化后,程序员需要判断当前的程序性能是否满足需求,根据性能结果决定是否需要开启下一轮性能优化,直至满足最初的程序性能目标后结束优化流程。

进行循环交换后的时间:

进行循环交换后matrixmulti函数的代码为:

循环展开

接下来使用循环展开进行优化,把最内层的循环展开四次,它的程序的运行时间此时就已经达到2.04秒,加速比已经达到1.56倍。满足最初的优化目标,结束优化流程。

进行循环展开后matrixmulti函数的代码为:

参考资料

AI框架发展白皮书(2022年) https://syncedreview.com/2020/12/14/a-brief-history-of-deep-learning-frameworks/


自编教材分享:第二章—程序性能的度量指标及优化流程的评论 (共 条)

分享到微博请遵守国家法律