初窥cpu体系

2018-07-12  本文已影响0人  ye2012

RISC和CISC

CPU的主要功能是通过执行各种指令实现的,CPU支持的所有指令构成了这个CPU的指令集。其中指令集分为RISC(精简指令集)和CISC(复杂指令集)

流水线处理

乱序执行

如果按照指令本来的顺序执行,一旦有一个操作需要消耗较长时间,比如需要从内存加载数据,那整个cpu都会陷入等待,所以乱序执行就被发明了。

LD r1,[a]; ←将内存的变量a 读入到寄存器r1(加载)
ADD r2,r1,r5; ←r1与r5相加,保存到r2
SUB r1,r5,r4; ←r5减去 r4,保存到 r1

读取变量a的过程可能会有延迟,而第二步也会因为r1无法取得无法进入流水线。但是第三步的r4,r5却是已经有的数据,这样第三步会先进入流水线执行,计算的结果覆盖了r1的值,从而导致计算第二步的时候结果错误。
这种前面指令用到的数值有可能被后面的指令覆盖的情况叫做反向依赖。
解决办法就是寄存器重命名。

LD p11,[a]; ←将内存的变量读入寄存器p11 (r1)
ADD p12,p11,r5; ←p11 (r1)与 r5相加,保存到p12 (r2)
SUB p13,r5,r4; ←r5减去 r4,保存到 p13 (r1)

在第一次给r1赋值的时候,用到的是p11寄存器,第二步等待的也是p11。但是第三部虽然是给r1赋值,但是这里写入的不是之前的p11,而是新的寄存器p13。这样就可以避免读后写(WAR)的依赖,即先写再读也不会有问题。不过要注意的是,这里会存储一个逻辑寄存器到物理寄存器的映射表,当分配新的物理寄存器时,要更改对应关系。指令提交的时候要把物理寄存器的内容写回到逻辑寄存器。

分支预测

cpu缓存

总结

CPU的体系是一个比较复杂的问题,因为每一家CPU厂商都在按照自己的步骤进行优化,但是这些理论还是比较通用的。可能平时工作中基本用不到这些东西,但是多了解一点还是有好处的,比如遇见一个诡异的问题的时候,代码层面解释不通,那很可能就是CPU在作祟。

上一篇 下一篇

猜你喜欢

热点阅读