首页 > 其他 > 详细

计算机组成原理:“性能”是什么?

时间:2020-02-28 16:11:49      阅读:69      评论:0      收藏:0      [点我收藏+]

计算机组成原理:“性能”是什么?

? 作者是初学者,该文章是作者的学习总结,不一定准确。

? 性能是一个很常见的词语。在学习完极客时间的深入浅出计算机组成原理后,稍微梳理一下自己对性能的理解。

“性能”=时间的倒数

? 谈及性能,我们一般分为两个指标去衡量。它们是响应时间吞吐率

响应时间

? 又称执行时间。是指CPU完成某一段程序所需要的时间。就好比工厂里完成一个零件生产所需要的时间。

吞吐率

? 又称带宽。是指CPU在一段时间内完成的多少,就像是衡量工厂里每一小时完成的零件生产个数或者是一个零件的完成率有多少。

? 响应时间像是百米冲刺的成绩,而吞吐率像是在规定时间内能跑多少。对于CPU来说,提高吞吐率可以在提高百米冲刺的成绩上下功夫,即降低响应时间,或者是多叫几个好朋友一起刷微信步数,即堆硬件。

? 对于CPU来说,提高响应时间是非常困难的,而堆硬件是比较简单的。就好像找朋友帮忙刷步数疯狂训练百米冲刺轻松多了是一个道理。

? 然后我们如何将性能指标化呢?我们一般这样定义:
\[ 性能=\frac{1}{响应时间} \]
? 很显然,响应时间越短,性能越高。

? 最近这些日子,手机处理器的跑分非常普遍。指定跑分规则的机构叫做SPEC(standard performance evaluation corporation)反正我觉得是越来越离谱了……

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

? 虽然用时间去衡量CPU的性能是一件很理所当然的事。但是在统计CPU运行时间的方式上,我们是传统的掐表计时,反映出来的数据并不准确。原因是,CPU在运行的时候,并不是专心的,而是三心二意的。

? 实际上,在我们测试的时候,CPU不单单只在运行我们的测试,它还偷偷运行着别的程序。比方说系统服务之类的东西,CPU其实一直在不断的切换,直接掐表得到的数据并不准确,我们需要把别的无关时间全部删除,剩下的时间我们才能认为是程序的运行时间。

? 其实这样还不行。CPU运行的时候,为了散热啊之类的东西,它会偷偷降点频啥的。你还是不能保证你的数据的准确性。很有可能上一次测试的时候,CPU是满载运行,但是下次测试,就降频了

? 还有就是,计算机并不是只有一个CPU组成,这个结果很有可能还会受主板啊内存啊之类的影响,总之单单靠一个时间数据是没法好好衡量性能的。

? 这样不行,不够准确。于是我们进一步将时间分割开来分析:
\[ 程序执行CPU的时间=CPU时钟周期数*时钟周期时间 \]

时钟周期时间

? 买过电脑的应该对CPU主频会有点影响。比如说我笔记本的CPU:

Inter(R) Core(TM) i5-8300H CPU @ 2.30GHz 2.30GHz

? 既然提到频率,我们不由得想起这个公式:
\[ f=\frac{1}{T} \]
? 不如我们就简单认为CPU一秒之内能处理2.3G条简单指令吧!

? CPU内部有一个像石英钟的东西,叫晶振。我们可以认为它是表示CPU内部时间流速的一个玩意。当它动一次,内部就完成一次指令一条。也就是说,它动得越快,CPU完成的指令越快。

? 所以,所谓超频,就是利用一些手段,提高CPU内部时间的流速,使得CPU工作得更快。

? 差不多是这个意思。注意时间流速只是稍微夸张一点,并不是真的加速时间,这个是物理层面上的加速,比如deadline快到了的时候疯狂肝作业肝项目的你看成加速时间一点也不过分吧哈哈哈哈。

? 所以老是超频容易导致CPU宕机,就好像熬夜肝项目被送进ICU一个道理。

CPU时钟周期数

? 一个时钟周期分为又可以继续分类,它可以表示为:
\[ CPU时钟周期数=指令数*每条指令的平均时钟周期数 \]
? 并不是每条指令的时钟周期都一样,加法指令比乘法指令快,就是说指加法指令的时钟周期比乘法指令的时钟周期小。

? 也就是说每条指令的完成可能需要多个时钟周期指令之间所需的时钟周期可能各不相同

汇总

? 根据上面的拆分,我们可以将原来的公式:
\[ 程序执行CPU的时间=CPU时钟周期数*时钟周期时间 \]
? 顺利拆分成这个样子:
\[ 程序执行CPU的时间=指令数*CPI*CCT \]

\[ CPI(Cycles\space Per\space Instruction)=每条指令的平均时钟周期数 \]

\[ CCT(Clock\space Cycle\space Time)=时钟周期时间 \]

? 于是乎,我们想要完成对性能的优化,就可以这三个方面着手优化;

  1. 降低CCT。砸钱买硬件吧!
  2. 降低指令数。
  3. 降低CPI

? 我们把CPU想像成一个程序员。程序员的打字速度相当于CCT。CCT越低,打字速度越快,敲代码就越迅速。CPI相当于程序员会多少的快捷键,会的快捷键越多,打出一行代码需要的击键数就越低,打得也就越快。同时程序员的设计思想相当于指令数,当他对代码的结构和算法进行合理的构思安排,可以极大的避免代码冗余,用寥寥几行代码完成了本来需要几百行的功能,同样开发得就越快。如果三者都能同时满足,程序的性能就能极大的提升。

思考:手机上的跑分如何“作弊”?

? 有一个很简单的办法(结合上面个结论)。因为为了散热和功耗,为了手机的温度和延长使用时间,会采取降频的操作。那我只要检测到跑分软件开启了,我就禁用散热控制,禁用功耗进行管理,杀死全部非必要的后台程序,直接拉满频率甚至超频,并针对跑分程序进行指令数优化,不就能跑出和实际体验不相符的分数了嘛?

计算机组成原理:“性能”是什么?

原文:https://www.cnblogs.com/cell-coder/p/12376853.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!