浅谈CPU性能问题

Posted mylearning-log

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈CPU性能问题相关的知识,希望对你有一定的参考价值。

1.什么是性能:

我们需要有个标准来衡量。这个标准中主要有两个指标:

第一个是响应时间(Response time)或者叫执行时间(Execution time)。想要提升响应时间这个性能指标,你可以理解为让计算机“跑的更快”

第二个是吞吐率(Throughout)或者带宽(Bandwidth),想要提升这个指标,你可以理解为让计算机“搬得更多”。

我们一般把性能,定义成响应时间的倒数,也就是:性能 = 1 / 响应时间

2.计算机的计时单位:CPU时钟

由于时间这个性能指标还会受到主板、内存这些其他相关硬件的影响,所以我们需要对“时间”这个我们可以感知的指标进行拆解,把程序的CPU执行时间变成CPU时钟周期数(CPU Cycles)和时钟周期时间(Clock Cycles)的乘积。

程序的CPU执行时间 = CPU时钟周期数 * 时钟周期时间

1)时钟周期时间:

你在买电脑的时候,一定关注过CPU的主频。比如我手头的这台电脑就是Intel COre-i7-7700HQ 2.8GHz,这里的2.8GHz就是电脑的主频。这个2.8GHz,我们可以粗浅的认为,CPU在1秒时间内,可以执行的简单指令的数量是2.8G条

如果想要更准确一点描述,这个2.8GHz就代表,我们CPU的一个“钟表”能够识别出来的最小的时间间隔。

在CPU内部,和我们平时戴的电子石英表类似,有一个叫晶体振荡器(Oscillator Crystal)的东西,简称为晶振。我们把晶振当成CPU内部的电子表来使用。晶振带来的每一次“滴答”,就是时间周期时间。

2)CPU时钟周期数:

我们再做一个分解,把他变成“指令数 * 每条指令的平均时间周期数(Cycles Per  Instruction,简称CPI)。不同的指令需要的Cycles是不同的,加法和乘法都对应着一条CPU指令,但是乘法需要的Cycles就比加法要多,我们的程序的CPU执行时间就可以变成这样三个部分的乘积。

程序的CPU执行时间 = 指令数 * CPI * Clock Cycles Time

因此,如果我们想要解决性能问题,其实就是要优化这三者。

1.时钟周期时间,就是计算机的主频,这个取决于计算机硬件。

2.每条指令的平均周期数CPI,就是一条指令到底需要多少CPU Cycle。在后面讲解CPU结构的时候,我们会看到,现代的CPU通过流水线技术,让一条指令需要的CPU Cycle尽可能地少。因此,对于CPU的优化,也是计算机组成和体系结构中的重要一环。

3.指令数,代表执行我们的程序到底需要多少条指令,用哪些指令。这个很多时候就把挑战交给了编译器。同样的代码,编译成计算机指令时候,就有各种不同的表示方式。

入门书籍推荐:

《计算机是怎么跑起来的》和《程序是怎样跑起来的》着重后面那本,可以说是一个入门微缩版本的“计算机组成原理”。

以及Coursera上的北京大学免费公开课《Computer Organization》

以上是关于浅谈CPU性能问题的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Spark应用程序的性能调优

Android移动客户端性能测试浅谈——电量

Android移动客户端性能测试浅谈——电量

浅谈对linux性能监控命令iostat的理解

浅谈Solr和ElasticSearch建索引性能优化策略

浅谈多核CPU多线程多进程