26、Superscalar和VLIW:如何让CPU的吞吐率超过1?

到今天为止,专栏已经过半了。过去的20多讲里,我给你讲的内容,很多都是围绕着怎么提升CPU的性能这个问题展开的。 我们先回顾一下[第4讲],不知道你是否还记得这个公式: 这个公式里,有一个叫CPI的指标。我们知道,CPI的倒数,又叫作IPC(Inst...

深入浅出计算机组成原理

25、冒险和预测(四):今天下雨了,明天还会下雨么?

过去三讲,我主要为你介绍了结构冒险和数据冒险,以及增加资源、流水线停顿、操作数前推、乱序执行,这些解决各种“冒险”的技术方案。 在结构冒险和数据冒险中,你会发现,所有的流水线停顿操作都要从指令执行阶段开始。流水线的前两个阶段,也就是取指令(IF)和指...

深入浅出计算机组成原理

24、冒险和预测(三):CPU里的“线程池”

过去两讲,我为你讲解了通过增加资源、停顿等待以及主动转发数据的方式,来解决结构冒险和数据冒险问题。对于结构冒险,由于限制来自于同一时钟周期不同的指令,要访问相同的硬件资源,解决方案是增加资源。对于数据冒险,由于限制来自于数据之间的各种依赖,我们可以提...

深入浅出计算机组成原理

23、冒险和预测(二):流水线里的接力赛

上一讲,我为你讲解了结构冒险和数据冒险,以及应对这两种冒险的两个解决方案。一种方案是增加资源,通过添加指令缓存和数据缓存,让我们对于指令和数据的访问可以同时进行。这个办法帮助CPU解决了取指令和访问数据之间的资源冲突。另一种方案是直接进行等待。通过插...

深入浅出计算机组成原理

22、冒险和预测(一):hazard是“危”也是“机”

过去两讲,我为你讲解了流水线设计CPU所需要的基本概念。接下来,我们一起来看看,要想通过流水线设计来提升CPU的吞吐率,我们需要冒哪些风险。 任何一本讲解CPU的流水线设计的教科书,都会提到流水线设计需要解决的三大冒险,分别是结构冒险(Structu...

深入浅出计算机组成原理

21、面向流水线的指令设计(下):奔腾4是怎么失败的?

上一讲,我给你初步介绍了CPU的流水线技术。乍看起来,流水线技术是一个提升性能的灵丹妙药。它通过把一条指令的操作切分成更细的多个步骤,可以避免CPU“浪费”。每一个细分的流水线步骤都很简单,所以我们的单个时钟周期的时间就可以设得更短。这也变相地让CP...

深入浅出计算机组成原理

20、面向流水线的指令设计(上):一心多用的现代CPU

前面我们用了三讲,用一个个的电路组合,制作出了一个完整功能的CPU。这里面一下子给你引入了三个“周期”的概念,分别是指令周期、机器周期(或者CPU周期)以及时钟周期。 你可能会有点摸不着头脑了,为什么小小一个CPU,有那么多的周期(Cycle)呢?我...

深入浅出计算机组成原理

19、建立数据通路(下):指令+运算=CPU

上一讲,我们讲解了时钟信号是怎么实现的,以及怎么利用这个时钟信号,来控制数据的读写,可以使得我们能把需要的数据“存储”下来。那么,这一讲,我们要让计算机“自动”跑起来。 通过一个时钟信号,我们可以实现计数器,这个会成为我们的PC寄存器。然后,我们还需...

深入浅出计算机组成原理

18、建立数据通路(中):指令+运算=CPU

上一讲,我们看到,要能够实现一个完整的CPU功能,除了加法器这样的电路之外,我们还需要实现其他功能的电路。其中有一些电路,和我们实现过的加法器一样,只需要给定输入,就能得到固定的输出。这样的电路,我们称之为组合逻辑电路(Combinational L...

深入浅出计算机组成原理

17、建立数据通路(上):指令+运算=CPU

前面几讲里,我从两个不同的部分为你讲解了CPU的功能。 在“指令”部分,我为你讲解了计算机的“指令”是怎么运行的,也就是我们撰写的代码,是怎么变成一条条的机器能够理解的指令的,以及是按照什么样的顺序运行的。 在“计算”部分,我为你讲解了计算机的“计算...

深入浅出计算机组成原理