从CPU谈起

作者: 烟雨乱平生 | 来源:发表于2019-10-22 19:56 被阅读0次

CPU的发展史

CPU的工作原理

总的来说,CPU从内存中一条一条地取出指令和相应的数据,按指令操作码的规定,对数据进行运算处理,直到程序执行完毕为止。


CPU指令周期

指令周期是取出并执行一条指令的时间。指令周期常常有若干个CPU周期,CPU周期也称为机器周期,由于CPU访问一次内存所花费的时间较长,因此通常用内存中读取一个指令字的最短时间来规定CPU周期。

一条指令还是相当复杂的,处理器在一个时钟周期内肯定是完不成的,可能需要好多个时钟周期来完成执行。如果这样让处理器执行完一条指令,再去执行另一条,处理器的效率是很低的,假如一条指令是5个时钟周期完成,对于500MHZ的处理器串行运行指令,1秒内取指100000000次。

因此处理器引入了流水线技术,将一条指令划分为多个功能,由不同的功能部件来执行,并且这些功能部件可以并行工作。


流水线技术

CPU在工作时,需要将一条指令分为多个步骤依次执行(注意硬件不同有可能不一样),由于每一个步会使用到不同的硬件操作,比如取指时会只有PC寄存器和存储器,译码时会执行到指令寄存器组,执行时会执行ALU(算术逻辑单元)、写回时使用到寄存器组。为了提高硬件利用率,CPU指令是按流水线技术来执行的,如下:



从图中可以看出当指令1还未执行完成时,第2条指令便利用空闲的硬件开始执行,这样做是有好处的,如果每个步骤花费1ms,那么如果第2条指令需要等待第1条指令执行完成后再执行的话,则需要等待5ms,但如果使用流水线技术的话,指令2只需等待1ms就可以开始执行了,这样就能大大提升CPU的执行性能。

理想情况下,CPU按照流水线执行指令,然而指令流水线除了在资源不足的情况下会卡住之外,指令之间的相关性也是导致流水线阻塞的重要原因。

虽然流水线技术可以大大提升CPU的性能,但不幸的是一旦出现流水中断,所有硬件设备将会进入一轮停顿期,当再次弥补中断点可能需要几个周期,这样性能损失也会很大,就好比工厂组装手机的流水线,一旦某个零件组装中断,那么该零件往后的工人都有可能进入一轮或者几轮等待组装零件的过程。因此我们需要尽量阻止指令中断的情况,指令重排就是其中一种优化中断的手段。

指令乱序

指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段呆很长时间,而导致后续的指令都卡在“执行”之前的阶段上。相反,流水线是并行的,多个指令可以同时处于同一个阶段,只要CPU内部相应的处理部件未被占满即可。

然而,这样一来,乱序可能就产生了。比如一条加法指令原本出现在一条除法指令的后面,但是由于除法的执行时间很长,在它执行完之前,加法可能先执行完了。再比如两条访存指令,可能由于第二条指令命中了cache而导致它先于第一条指令完成。

一般情况下,指令乱序并不是CPU在执行指令之前刻意去调整顺序。CPU总是顺序的去内存里面取指令,然后将其顺序的放入指令流水线。但是指令执行时的各种条件,指令与指令之间的相互影响,可能导致顺序放入流水线的指令,最终乱序执行完成。这就是所谓的“顺序流入,乱序流出”。

CPU的乱序执行并不是任意的乱序,而是以保证程序上下文因果关系为前提的。有了这个前提,CPU执行的正确性才有保证。

相比于CPU的乱序,编译器的乱序才是真正对指令顺序做了调整。但是编译器的乱序也必须保证程序上下文的因果关系不发生改变。


相关文章

  • 从CPU谈起

    CPU的发展史 CPU的工作原理 总的来说,CPU从内存中一条一条地取出指令和相应的数据,按指令操作码的规定,对数...

  • 从戒烟谈起

    一个偶然的机会关注到“007不写就出局”,我被社群口号震撼到了:“7天1篇写7年,7年后一起去南极”。这个想...

  • 从跑步谈起

    也许一切都不会再好了,一切都在往越来越糟糕的方向。你的体能在下降,皮肤在变差,记忆在衰退,究竟是什么可以支撑我们,...

  • 从禁烟谈起

    我喜欢抽烟,而且随着年龄的增长越抽越厉害,从以前的一天一包,到现在的一天两包。 抽烟对身体不好...

  • 从西瓜谈起

    据说把一个西瓜从高空抛下,往往会挽救一个人的生命!因为那个对生活万籁俱寂的人选择自由落体的时候,看到落地的西瓜会想...

  • 从锤炼谈起

    锤炼是指锤打和锻炼。有一个概念叫做舒适区,谈的是人的心理状态,处于一种完全由自己掌控的,全然舒适的状态,对所处的环...

  • 从投稿谈起

    一、 最近开始在简书上日更,跟着一帮共同成长的网友们,一起日更,不但更新文章,也一起更新自己的操作系统。 在日更的...

  • 从焦虑谈起

    经历了五个小时的奔波终于到达了郑州,对于不上高速的大巴,你还真拿他没办法。你永远不知道他什么时候停,所以显得特别焦...

  • 从死亡谈起

    二零一七年的八月,我忘记了具体是哪一天,我是一个健忘的人,我只知道那一个月被她赋予一些特殊的记忆,谁也不喜欢的特殊...

  • 从“Fit”谈起

    其实蛮讨厌以这样的开头起文,貌似接下来叙述的每一件事情都异常重要一般,不让全天下的人知晓好像你压根儿就没做过事情...

网友评论

    本文标题:从CPU谈起

    本文链接:https://www.haomeiwen.com/subject/tqrcvctx.html