什么是性能呢?性能又是由什么来决定呢?
我们买电脑或者手机的时候,常常会盯着CPU的性能来进行选择,大家主要会考虑CPU的主频,和CPU的缓存这两点进行选择,那么为什么呢?这两点是如何与性能相关联的呢?
这里就涉及到两个概念。即响应时间(Execution time)和吞吐率(Throughput)。
响应时间与吞吐率
响应时间也叫执行时间,即我们执行一个程序所需要花的时间,时间越短,响应越快,性能越好。程序执行的数量越多,吞吐率也就越大。
那么除了缩短响应时间,还有什么办法提高吞吐率呢?多核技术也是一种解决方式。CPU单核频率相同下,核心数越高性能也越好。可以理解为以前是一个人工作,现如今是多个人一起工作,效率自然不同了。
那么如何定义性能呢?一般我们把性能定义为响应时间的倒数,即:性能=1/响应时间。 这样响应时间越短,性能值也就越大。
关于CPU时钟
我们都知道,现在的计算机上同时运行这多个程序,无论是PC也好,还是我们日常使用的手机也好,CPU是如何分配处理任务呢?CPU是不断的在各个程序之间切换执行计算任务的,所以我们每次程序执行的时间都不一样,因为我们不知道执行我们关注的程序时,CPU去执行了哪些其它的程序。
那么怎么细化我们关注的程序执行的时间呢?这里就要引入两个概念了,CPU执行周期数和时钟周期时间
什么是时钟周期时间呢?比如我们CPU主频为2.4GHz,那就证明,CPU的时间最小分割单位为1/2.4GHz,这个2.4GHz是如何来的呢?我们CPU中都有一个晶体振荡器,晶振在CPU内部起到了定时的作用,它每一次变化的周期所用的时间,即为时钟周期时间。所以如何计算程序的CPU执行时间呢?公式如下:
程序的CPU执行时间=CPU时钟周期数 x 时钟周期时间
我们可以针对时钟周期数再进行分解,变为“指令数x每条指令的平均时钟周期数(Cycles Per Instruction,CPI)”,不同的指令CPI不同,那么刚刚的公式便细化成如下:
程序的CPU执行时间=指令数xCPIx时钟周期时间
所以优化即可以从上面的公式入手,缩短程序的CPU执行时间,使用主频更高的CPU,可以缩短时钟周期时间;程序的实现干练精简,可以减少指令数;擅长使用某些计算方式替代,可以减少CPI,此即为优化程序的关键三点,如果这三点能够做到,程序的性能自然也不会差。