流水线的相关以及处理方法

流水线的相关分为局部相关和全局相关


局部相关:仅涉及到相关指令前后的一条或几条指令的执行的相关问题。

全局相关:是影响整个程序的执行方向的相关问题,只要是转移类指令和中断引起的相关问题。


流水线的局部相关以及处理方法:
局部相关又可以细分为以下三种:

  1. 先写后读相关
  2. 先读后写相关
  3. 写-写相关

以上的局部相关的几种细分相关与流水线的流动顺序的安排和控制有关。


流水线的流动顺序又分为:

顺序流动:是指处理对象从流水线流出的次序和他们流入流水线的顺序一样。(也就是先进先出,类似于队列)

异步流动:是指处理对象从流水线流出的次序和他们流入流水线的顺序不一样,异步流动也称为乱序流动和错序流动。


1 先写后读相关
一般一个指令流水线中读的操作在前,写的操作在后。
若是流入流水线的一段指令中,先流入的指令的写入结果的目的地址与后流入的指令的读取操作的源地址是同一个寄存器或者是存储单元的时候,可能会发生当后流入的指令达到读的操作的时候,先流入的指令还没有进行写的操作。

2.先读后写相关
若是流入流水线的一段指令中,先流入的指令读取操作数的源地址和后流入的指令的写入结果的目的地址是同一个寄存器或者是存储单元,如果后流入的写操作先于前流入的指令的读操作,就会发生限度后写相关。

3 . 写写相关
如果前后两条指令的写操作的目的地址一样,如果先流入的还没有进行写操作,而后流入的已经进行写操作,就会存在这种相关。


当流水线中存在先写后读的相关的时候,可以采用以下两种方法解决:

1 延时:让后流入指令的读操作以及其后的指令流动暂停,等待写段指令写完成。(这种方式控制简单,但是降低了流水线的吞吐率和效率)
2 异步流动 :让后流入的指令的读段暂停,但是其后的指令可以依次越过该指令继续向前执行。

采用异步流动处理先写后读相关的时候又会产生其他两种相关。

解决异步流动中出现的先写后读相关的方法:

1**延时**。(老方法,暂停到先流入的指令执行完之后再执行)
2**建立相关专用通路**(在流水线的读段和写段增加一条专用的数据通道,使得先流入的指令可以通过该通道直接读取后流入指令在写段的时候刚刚写入的数据)


流水线全局相关以及处理方法:
(1)条件转移以及处理方法:
条件转移指令一般要在流水线的最后一个功能的功能段的时候才能确定是否转移。
因此,为保证程序的正确性,在条件转移指令进入流水线之后到形成是否转移的判断之前,其后续的指令不应进入流水线呗执行。(也就是后续的指令要等待条件转移命令执行完再进入到流水线)
解决方法:猜测法
也就是提前预测一下。

(2)中断及其处理方法:
当一个中断源的中断请求被响应的时候,需要确定断点以及现场,方便中断返回时,能正确的郐中断现场。
中断处理的方法:
1不精确断点方法
当发生中断的时候,凡是已经进入到流水线的指令序列的指令到继续执行完成,断点的指令就是该指令序列左后进入到流水线的那条指令。这种方法的断点不确定,程序的执行结果可能不对。
2精确断点的方法:
当发生中断的时候,对于在流水线中的同事执行的多条指令,那一条发生中断,那么那一条的就是断点指令。

  • 11
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值