这需要引入一个概念,处理器IPC(Instruction Per Clock),即CPU每一个频率周期里处理的指令数量,这个指标越高越好。IPC基本可以看成一款CPU架构先进程度的体现。

翻译成人话就是:

处理器工作=搬货物上楼,一条指令集就是一包货

处理器频率=CPU一小时内能上下楼几次

处理器IPC=CPU一次能扛几包货上楼

奔腾4这种老架构,身材瘦弱,一次只能扛一包货上楼。

而新架构的9代i7,孔武有力,一次能扛十包货上楼。

所以就算他们两个上下楼的速度一样,9代i7一小时内扛的货物数量也比奔腾4高多了。

这就是简单理解新旧处理器同频率但不同性能的比喻。

题外话,孔武有力的九代i7搬完货甚至还有余力把楼上住户的垃圾顺道带下楼去扔了,这就叫超线程。


啊这

CPU的性能是多个角度决定的,如果存在一个足够理想的内存子系统,CPU频率和流水线长度/执行周期,最大程度的决定了「速度」


如果觉得有问题,这里引用一个参数,CPI rate(Clycle Per Instruction retired)。既每个指令平均消耗的周期,如果有一个4指令发射的CPU,那么最理想就是0.25(1/4)。

那么现实程序怎么样呢?以我巫师3血与酒的数据,在1.12,也就是说每个CPU周期都没办法执行一个指令。这个是程序的指令的并行度问题

多线程也一样

简单来说,CPU的宽度和多线程的作用都比很有限,更加重要的是周期数和流水线长度。超线程本身就是程序的指令并行度低而产生的技术


但是实际,CPU会消耗大量的周期等待内存子系统。再以实际测试,通常程序只有30%pipeline slot得到了执行。其中绝大部分都是为了等待内存子系统而消耗的。不是前端就是后端的延迟高了

也就是说这十年里,内存性能的提升就是提升性能的。同时更高密度的工艺,降低流水线长度/执行周期,都是提升性能的。(ARM那边可能更真实,虽然ARM核心频率越来越高,但是执行周期是一直在降低的。所以保持相当的PPC(Performance Per Clock,每周期性能)的增幅

同时还有别的要素,比如分支预测的命中率,但是分支预测很少有成为瓶颈的


如果只看最高频率的话,的确频率是没有较大提升的,目前9代酷睿里的最高频率 I9-9900KS能全核5G

十年前二代酷睿I7-2970X 最高加速频率也能到4G

ps:其实是9年前,初代酷睿数据不在天梯图里,懒得重新查了

但CPU的性能不止看频率的,相同频率也不代表相同的性能.

这里就要引入一个概念: IPC(Instruction Per Clock)翻译过来就是每个时钟周期CPU所执行的指令的多少.

所以CPU的性能粗略可以通过这个等式来计算 :

性能 = IPC * 频率

而IPC可以通过CPU的架构/工艺制程等方式来提升.所以虽然现在一些CPU的频率和十年前的CPU频率相近,但性能确实天差地别的.

而且,前面说的其实只是单核性能的提升,通过将CPU核心的数量翻倍,也能实现CPU性能翻倍(近似)的效果.当然这些还远远不止!

我们还有超线程(Hyper-Threading)

通过这项技术,可以实现在一个实体核心上运行两个逻辑线程.从而在操作系统层面实现线程翻倍的效果.当然相比于直接增加核心数量,超线程技术提供的线程翻倍效果是有损耗的而且还需要主板,晶元组,操作系统还有软体的支持才行.当然你近似类比成翻倍也没毛病.

其实增加核心数量和超线程技术都不是进十年来出现的.只是CPU厂商做的技术下放.

不过也正是由于这些下放的技术才促使消费领域的CPU性能突飞猛进的原因.

尤其是AMD 锐龙ThreadRipper 3990X 更是夸张的做到了64C128T(64核心128线程)

鲁大师单个CPU跑分都高达100W+的变态地步.

以上


为啥我感觉这十年除了最近AMD yes事件,CPU性能提升主要还是频率增加呢... _(:з)∠)_

以下表述顺序并非计算机发展顺序,只是为了说著方便。另外所有这些都不是近十年的技术,只是可以在提升频率以外提升处理器性能的方法。

简单说就是两件事:一个是尽量减少平均执行一个操作所必须的时间,一个是尽量不闲著。

频率决定了处理器工作的节奏。理想状态下,你做一件事用同样的步骤,工作节奏越快效率越高。比如一件事有两步,你一分钟完成两步肯定比一分钟完成一步要快。

但是频率不能无限提高,会受其他客观因素影响。比如让你抄作业[划掉],你写每个字的速度是有极限的。如果限制了增加频率,那么最直接的办法就是减少步骤。比如,你用草书抄作业[划掉],减少字的笔画数,同样的节奏写出来的字自然就多了。处理器设计上会试图减少进行一个操作需要的时钟周期,以此提升同频率下的处理速度

显然,减少步骤也有极限——一件事简化到只有一个步骤就没办法再减了。另外,实际操作中减少步骤往往要靠消耗脑细胞来实现的。在技术本身没问题的情况下,做一件事的步骤越少难度越大,越费脑子。而你并不只要做抄作业[划掉]一件事。如果每件事都这么费脑子,你的脑子就不够用了。

怎么办?我相信很多人都干过用好几支笔写作业的事。处理器上,这称为SIMD(每条指令多个数据)。你用同样的节奏,同样的步骤,同时处理几件事。显然效率蹭蹭地就上去了。

不过,你能同时抓的笔的数量还是有极限的(PS 你也未必总是同时有很多作业要抄[划掉],不过暂时不考虑这种情况)。这个时候你已经被折腾的焦头烂额,你希望——有人能来救你。对!多找几个人就好。处理器多弄几个核心就好。这没什么好说的,不过好像最近十年的前八年,桌面处理器的核心数量就没变过...

那最近十年的前八年发生了什么?还是加人,不过是另外一种办法。多核心于其说是加人不如说是加团队。真正的加人手的办法是这样的:

比如你抄作业[划掉]减少到最后还是需要三个步骤:把作业拿来,抄,把作业送走。执行这三个操作的方法都在你脑子里,而你执行其中一个操作的时候,其他两个操作占用的脑子是闲置的!浪费可耻啊!如果,有三个人,每个人只懂得其中一个操作,只做其中一个操作呢?铛铛铛!流水线(pipeline)出现了!这样如果你有很多作业要抄[划掉],那么每个人在绝大多数时间都是在工作的。占用同样的脑细胞,工作效率变成了原来的三倍!——虽然一个操作花的时间没变,但是这个操作的吞吐能力(throughput)提高了。

人生不可能只抄作业[划掉],可能...还需要写作业。找来的人不只有会抄作业的,还可能有会写作业的。我们显然不会希望执行抄作业[划掉]任务的时候不能执行写作业的任务,或者反过来。如果他们可以同时工作,那么在同时存在抄作业[划掉]和写作业两种任务的时候,工作效率就进一步提高了(即便是SIMD没办法用的情况)。如果流水线是在一个操作流程上的纵向的责任划分,这就是在不同操作上横向的责任划分。这称为超标量(superscalar)

最后,如果你要抄大量作业[划掉]的情况下,把以前抄过的作业[划掉]拿过来的速度有时候也是会大大影响效率。这就是缓存(cache)功能。不过这个要细说就完全是另外一个话题了。

PS 超线程(hyperthreading,不过不同的处理器有不同的叫法)是在流水线和超标量基础上衍生出来的功能,并不能直接提升工作效率。比如一个人找你帮忙抄作业[划掉],那么你写作业的功能必然闲置。如果同时还有一个人找你写作业,并且你能同时接受这两个人的委托,你就能把写作业的功能也利用起来。这就是超线程,上面这个例子是通过超线程将本来无法发挥作用的超标量激活。另外一种情况是如果一个人找你帮忙抄作业[划掉],但是他提供作业很慢,不能让你的工作饱和。这时候如果能同时接受另外一个抄作业[划掉]的委托,就能让抄作业的功能饱和。这是通过超线程为流水线填充更多的任务。最后出力气的还是流水线和超标量。


这就像货车送货,都是跑两趟,装车一吨和装车两三吨送货量肯定不一样。

货车能塞的进几吨,除了跟载重量有关系以外,货物怎么打包也有关系。

CPU频率就像是送货的次数,制程决定的是能装几吨,架构决定就像是货物打包的方法。


题目说的「速度」是个模糊的概念。

对于处理器的性能度量有多种标准。MIPS是贴近题目要求的一种度量,指每秒执行几百万条指令。这个结果确实是同一个cpu的情况下,频率越高数值越大的。

CPU速度的提升同时来源于体系结构的优化和工艺的进步。虽然频率都差不多,但因为有上述两方面的进步,平均下来每周期执行的指令却更多了。

比如:

内存频率增加,预取变宽,导致平均一次缓存未命中后等待载入数据所浪费的时间更少了。

缓存变大或者更智能的缓存替换策略导致缓存命中率上升,访存操作平局需要的时钟数就变低。

更优秀的分支预测器也能降低错误预测带来的代价。

更多的计算资源也让每周期可以同时执行的计算增加。

更加高效的片内互联网路让数据同步平均需要的周期更少。

引入更新的SIMD指令集也可以利用并行性加速计算。

AMD64指令集也比十多年前的32位的指令集要强。

单个CPU里的核数也多了。

操作系统这十年来也会有与硬体相适应的优化,其他外围硬体对提升性能也会有帮助,比如SSD。


cpu的制程或者工艺吧,原来有人把推土机超到8点多,但单核性能打不过默频2600


推荐阅读:
相关文章