计算机科学速成课听课随笔3

naoziinicu / 2023-05-03 / 原文

#高级CPU设计(简

随着科技技术的增加,人们不断提高CPU的时钟速度,以此来适应越来越多的指令,此时CPU的处理速度就会超过数据的供应速度

RAM需要时间去找出地址,取数据,配置,通过总线(BUS)输出数据给CPU,CPU空等数据就产生了“延迟”

解决延迟的方法之一就是给CPU加一点RAM,叫做“缓存”

由于CPU中空间不大,所以缓存也不大,一般只有KB或者MB

有了缓存之后,CPU从RAM中拿数据的时候,就不用一次拿一个了,可以一次拿一批都放在缓存中

 

如果想要的数据已经在缓存中,叫做 缓存命中

想要的数据不在缓存中,叫做 缓存未命中

缓存也可以当临时空间,存一些中间值,适合长/复杂的运算

数据存储的时候,而不再是直接存储到RAM,而是先储存在缓存,这样不仅存的快,需要接着算的时候,取值也快一点

 

但是此时产生了一个问题,缓存和RAM不一致了

这个不一致必须记录下类,之后要同步

因此,每一块缓存中都有一个特殊标记,叫做“脏位‘

 

同步一般发生在 当缓存存满了而CPU又要缓存的时候,清理缓存腾出空间之前,会先检查”脏位“

如果脏位是“脏的”,就会将缓存中的数据写回RAM,在向缓存中写入新的数据

 

另一种解决延迟的方法 叫做”指令流水线“

可以用”并行处理“提高效率

CPU的按序处理为”取码,解码,执行“不断重复,又因为每一个步骤用的是CPU的不同部分,所以意味着可以使用并行处理

取码一个指令的同时,可以解码下一个指令,可以执行下下一个指令

 

但是还是会有一些问题

第一个问题就是 指令之间的依赖关系 在一些指令的执行过程中,会改变并发处理下当前读取指令的数据

要避免这个问题,就要提前理清关系,必要时停止

在高级的CPU中,会动态排序这些有依赖的指令来优化流水线的停工时间,这叫做“乱序执行”

第二个问题就是 条件跳转的指令 ,这些指令会改变程序的执行顺序

简单的流水线处理器,会稍等一会等到条件值确定下来,在做接下来程序的执行

而高级的流水线处理器,会进行“推测执行”,由CPU去猜测当前条件的条件值,并提前去在缓存中塞入该推测的条件值之后的指令

如果猜对了就可以马上运行,猜错了只能清空流水线,从头再来

为了减少冲头再来的次数,防止浪费时间,CPU厂商开发了一个方法“分支预测”,正确率高达90%

还可以更近一步,加几个相同的电路,执行出现频次很高的指令

 

还有一个解决延迟的办法就是 同时运行多个指令流 用多核处理器

也就是一个CPU中,有很多独立处理单元

他们整合紧密,可以共享一些资源,像是缓存,来进行多核运算

多核不够用就可以用多个CPU,超级计算机就是如此组成的