【计算机系统结构】【延迟槽技术】分支延迟、分支预测和MIPS延迟槽

注:本文从系统结构的角度去看待延迟槽这一技术,故不会涉及到代码细节,仅仅描述延迟槽的工作原理。且该文字描述的流水线基于的是经典的MIPS五段流水,即IF、ID、EX、MEM、WB。

一、前置知识

延迟槽出现是源于指令流水线中出现的控制冲突,由于分支指令需要在MEM段才将跳转地址传入PC,故在流水线中,需要有两个stall(流水线气泡)去等待分支指令的PC值(说白了就是得到分支是成功还是失败,跳转到的地址是哪里),因此效率是很低下的。

在这样的情况下,设计者为了减少分支延迟,则需要让流水线尽早判断出(或者猜测,这里只会介绍简单的分支预测)分支是否成功,并且尽早计算出分支的目标地址(实际上这两点是一个意思)。在对技术进行改进之后,可以使得流水线在ID段结束就可以得到分支的跳转方向,这无疑很大程度上提高了效率,但还不够,因为这仍然存在着一个分支延迟,导致效率的降低。因此出现了三种比较简单的进一步减少分支延迟的方法

减缓方法

一、预测失败、成功

这两种方法实际上就是去猜测分支跳转的方向,比如猜测分支总会成功。这样的预测是有实际意义的:例如程序中某个函数在多次样例下总是向着正确分支的方向跳转,那么我们就可以预测这个函数的分支就是向着正确的方向跳转。事实证明这样确实可以提高效率。而预测失败大同小异,即预测分支向着失败的方向跳转。

下图是采用预测分支失败的方法的流水线时空图:可以看到该情况下分支失败就可以忽略等待跳转的结果。但在预测失败时,需要丢弃掉原预测方向的指令,选择正确的指令进行执行。
在这里插入图片描述

二、延迟分支(Delayed Branch)

这种方法的思想其实是去延长分支指令的执行时间,因此多出来的时间可以用来填补上图分支预测失败导致的丢弃指令的操作。那么如何延长呢?其实就是通过设置延迟槽(slot),一般来说,延迟槽都是一个,且无论分支是否成功,都需要执行延迟槽中的指令。即:

(1) 分支指令
(2) 延迟槽
(3) 后续指令

那么延迟槽的内容是什么呢?毕竟延迟槽是需要被执行的,那么最好是执行一些无论分支成功失败都要执行的指令,最好还与分支并不相干。比如如下的执行过程,延迟槽的指令如果是一条和分支完全无关的指令,那么就可以很好的填补预测错误导致的丢弃指令的操作,也就避免了时钟周期的浪费,使得指令更加紧凑
在这里插入图片描述而如何选择这样的语句呢?常用的调度方法有三种:从前调度、目标处调度和失败处调度。
在这里插入图片描述
以从前调度举例:原来的情况是if跳转成功则执行某条语句(即箭头指向),而前面的add指令与分支无任何关系,那么此时将其放入延迟槽(要记得,无论分支预测如何,都要执行延迟槽指令,且是在branch后一句执行),就可以充分利用分支指令的空间。而剩下两种方法也是如此。

而目标调度并不是直接移动指令的原因是别的路径可能也要执行改条指令。

总而言之,延迟槽的作用就是通过找与分支无关的指令(或者不影响分支运行的指令)去充分利用分支的空间,进而削弱预测分支的副作用,减少分支延迟。

MIPS指令调度和延迟分支中,互锁机制的工作原理是通过硬件实现的。其基本思想是在发现数据或控制相关时,通过暂停执行指令的方式来避免相关问题的出现。 具体来说,互锁机制包括以下几个步骤: 1. 检测相关:当一条指令需要使用到之前指令的结果或分支结果时,就会触发相关检测。这个过程通常由硬件实现,可以通过比较指令中的寄存器编号和功能码等来判断是否存在相关。 2. 暂停执行:如果发现相关,就会暂停当前指令的执行,等待前面指令的结果。具体来说,对于名相关,后续指令会等待前面指令的结果写入寄存器;对于数据相关,后续指令会等待前面指令的分支结果。 3. 保持互锁:为了避免相关问题的出现,暂停执行的指令会保持互锁状态,直到前面指令的结果计算完成或分支结果确定后才能继续执行。这个过程通常由硬件实现,可以通过设置互锁标志或清除互锁标志来实现。 4. 解除互锁:当前面指令的结果计算完成或分支结果确定后,就会解除互锁,允许后续指令继续执行。这个过程通常由硬件实现,可以通过清除互锁标志或改变指令执行状态来实现。 总之,互锁机制通过暂停执行指令的方式来避免相关问题的出现,从而保证指令的正确执行顺序。这个机制通常由硬件实现,可以大大提高指令执行的效率和正确性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值