【cpu执行时间】简称CPU时间,表示执行某一任务在CPU上所花费的时间,不包括等待I/O或运行其他程序的时间。
程序的cpu执行时间 = cpu时钟周期数 × 时钟周期时间 = cpu时钟周期数 ÷ 主频
要想缩短cpu执行时间,最简单的方法就是缩短cpu的时钟周期时间,也就是提升主频。
何为主频?
主频就是机器内部主时钟的频率,其常用单位为HZ,MHZ等。例如主频为8MHZ的机器,每秒有8M个时钟周期,cpu时钟周期是主频的倒数,则它的时钟周期数为1/(8x10^6)HZ=0.125μs
cpu周期又称机器周期,通常用从内存中读取一条指令字的最短时间来定义,一个指令周期由若干个cpu周期构成。
换言之,就是换一块cpu。不过,这是软件工程师控制不了的事,所以我们自然想到乘式中另一个因子——cpu时钟周期数。如果能够减少程序所需要的cpu时钟周期数量,一样能够提高程序性能。
对于cpu时钟周期数,我们可以再做一个分解,把它分成:
cpu时钟周期数=指令数×每条指令平均时钟周期数
不同的指令需要的周期数是不同的,加法和乘法都对应着一条cpu指令,但是乘法需要的cpu时钟周期数就比加法要多,自然也就慢。在拆分了之后,我们的程序的cpu执行时间就可以变成这样三个部分的乘积:
程序的cpu执行时间=指令数×CPI×时钟周期时间=指令数×CPI/时钟频率
CPI:执行每条指令所需要的时钟周期数的平均值。
CPI = CPU时钟周期数 / 指令条数 = CPU时间 × 时钟频率 / 指令条数
因此,如果我们想解决性能问题,其实就是要优化三点:
1、时钟周期时间,就是计算机主频,这个取决于计算机硬件。
2、每条指令的平均时钟周期数CPI,就是一条指令到底需要多少CPU cycle。现代的CPU通过流水线技术(pipeline)可以让一条指令需要的cpu cycle尽可能的少。
3、指令数,代表我们的程序到底需要多少条指令,用哪些指令。这个很多时候就把挑战交给了编译器。同样的代码,编译成计算机指令的时候,就有不同的表达方式。
MIPS:每秒执行多少百万条指令
MIPS = 指令数 / (执行时间 × 10^6 ) = 主频 / CPI
【amdahl定律】
改进后的执行时间=受改进影响的执行时间/改进量+不受影响的执行时间
amdahl定律阐述了“对于特定改进的性能提升可能由所使用的改进特征的数量所限制”的规则,他是“收益递减定律”的量化版本。改进后程序的总执行时间Tn = 改进前整个程序的执行时间 × (1 - 可改进比例Fe + (可改进比例Fe / 部件加速比Se))
改进后,整个系统的加速比为:Sn = T0 / T1 = 1 / (1 - Fe + (Fe / Se))