CPU指令执行及流水线(超标量、多发射、乱序执行)

用生活例子引入流水线逻辑:**

为什么要引入流水线(流水线诞生之前):

首先计算机是通过CPU执行指令来实现运行并计算的,计算机在设计之初,每条指令只能串行执行,意思就是等第一条指令执行完,第二条指令才能开始执行,这样显然效率太低。

流水线设计原理:

然而指令执行过程有很多阶段,比如经典的五级流水线结构,把指令执行的阶段分成五级,分别为取指、译码、执行、访存、写回,就像手机组装生成线上的把组装、检测、包装一样,不同阶段是不一样的工人在干活,同样五级流水线中的每一级用的也是不一样的CPU部件。在手机组装过程中,第一个人组装完第一台手机就把第一台交给测试工人,组装工人继续组装第二台手机。测试工人也一样测试完第一台就交给下个包装工人,自己继续测试第二台。所以有人想办法借鉴组装手机这种思想去构造流水线,第一条指令取指完,就把这条指令交给译码部件,自己继续取指第二条,这样的话从第5个时间段开始,每个部件都在自己忙活,不存在之前的串行问题,5个时间内,每个部件只上一个时间的班,其余时间都歇着。这就是流水线技术。

多发射:

但是随着集成电路发展,很多人不满足这样的效率,萌生出一次我直接执行两条毫无关系的指令。也就是一次发射两条指令。多发射就是这个意思。显然生活中肯定一心不能二用,但是现在可以增加部件,也就是组装线上坐多个人也就是多条流水线,实现了多发射。

乱序执行:

由于在指令在一定逻辑上只能按照顺序执行,比如疫情期间在家办公,计划的顺序是起床、等快递来送菜、做早饭、吃早饭、回复邮件、开始工作。但是快递小哥迟迟不来,咱们是不是得一直等着他来送菜再进行下面的事情?显然不会,你一定会把等菜、做饭、吃饭等一系列步骤放着,先去执行另一系列的步骤(发邮件、工作),因为这两个系列的步骤是完全不相关的。放在CPU中的逻辑时,某条指令需要访存,访存的时候多级cache不命中、内存缺页等原因导致访存时间延长,这个时候是不是也像快递小哥迟迟不来一样,这个时候咱们就要先放弃这一系列的事情,先去执行后面的与之无关指令。等访存结束再去回去执行之前被耽搁的指令,这就是乱序执行(因为指令的顺序被打乱了)。这样的代价在哪里?,为什么叫乱序执行,不叫乱序提交,那就是因为提交顺序(最后结果)必须正确,比如一个寄存器按照原本的顺序是 被改成3、3被访问、被改成5、5被访问,显然前两个跟后两个没有关系,如果出现了乱序执行,先执行了后两个,那么寄存器最后结果就是3了,后续跟这个寄存器打交道的指令都会出错(原本希望最后是5),所以提交顺序一定要正确,所以设计了保留站和ROB(重排序缓冲),那就是标记指令本来的执行顺序,在写回(最后一级流水线)的时候、如果比自己标记好小的指令不提交,自己就在ROB中呆着等待原本在自己前面的指令提交。这样就保证了既节省时间又能正确提交。

超标量:

上面是说的都是一个核同时只能执行一条指令,超标量就是一个核同时可以指令两条指令。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值