程序性能优化——二、程序性能度量指标

本章介绍了多种程序性能的度量指标,以及Windows,Linux系统下的度量方法。

执行时间

1.局部程序

C语言中可以利用time,clock等函数来查看局部程序的消耗时间

2.整体程序

Linux下可以使用time命令来查看程序消耗的时间

>>/home/Code# time ./hello.out

real    0m0.002s
user    0m0.002s
sys     0m0.000s

Windows环境下可以在PowerShell中使用命令Measure-Command { .\your_program.exe }来查看

>Measure-Command {.\Example.exe}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 81
Ticks             : 810832
TotalDays         : 9.38462962962963E-07
TotalHours        : 2.25231111111111E-05
TotalMinutes      : 0.00135138666666667
TotalSeconds      : 0.0810832
TotalMilliseconds : 81.0832

计算与访问内存效率

计算效率指的是硬件(CPU、GPU)的实测浮点性能与理论浮点峰值性能之比,访存效率指的是硬件的有效访存带宽与带宽上限之比,有效访存带宽是指程序访存的数据量与计算时间的比值。

不同的程序对计算效率和访存效率的要求不同,并以此可以分为计算密集型程序和访存密集型程序。所以,要抓住程序的主要矛盾进行优化。

Windows和Linux环境下均有大量的工具能够查看这两个效率,在此不赘述。

吞吐量与延迟

当考虑一个交互式的程序或者说一个软件系统的性能时,会考虑吞吐量与延迟这两个指标。它们分别对该程序的整体和局部进行评判。

吞吐量指的是给定时间内,能够完成的工作量,任务数。吞吐量越大程序的效率越高。延迟指的是完成单个任务所占的时间。延迟越小响应的速度也就越快。让吞吐量变大,让延迟减小是系统优化的两个方向。

加速比

这个定义比较朴素,加速比等于优化前程序执行时间/优化后程序执行时间。必须说明的是,实际加速比往往小于理论加速比,因为存在多种潜在的开销。但如果使用并行的方式优化程序后,加速比大于并行个数(称为超线性加速),说明优化前的串行程序并没有很好地发挥单处理器的性能,本身就具有很大优化空间。

关于加速比,有两个很朴素的定律

Amdahl定律:S = 1/( (1-a) +a/n ),其中S表示程序优化的加速比,a表示程序中可以并行处理的部分,n表示并行的核数。这仅在任务总量恒定,且并行不存在通信等问题时成立。

Gustafson定律:S = (1-a) + an,其中S表示扩展加速比,a表示程序中并行处理的部分,n表示并行的核数。串行的部分越小核数越大,则扩展加速比越大。

提升上述指标的方法论,请见专栏的下一篇文章《三、程序优化的和流程》

专栏安排(已有,或将有)

一、程序性能优化的意义

二、程序性能的度量指标

三、程序性能优化流程

四、程序性能的测量和分析

五、程序编写时的优化(上):算法优化、数据结构优化、函数优化

五、程序编写时的优化(下):循环优化、语句优化

六、访存时的优化(上):寄存器优化、缓存优化、内存优化

六、访存时的优化(下):磁盘优化、数据分布

七、编译与运行时的优化(上):编译器结构、编译选项、编译优化

七、编译与运行时的优化(下):数学库优化、运行时的优化

八、系统配置的优化

九、单核优化

十、OpenMP程序优化

十一、MPI程序优化

十二、…

如有不足之处,敬请批评指正

更欢迎在评论区留下你的见解,你的方法,如果有效我会增加在文章中,并@你。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值