挑战408——组成原理(27)——流水线的影响因素

之前说过,目前影响流水线
主要的冲突有:
资源冲突(结构相关),数据冲突(重点),控制冲突。

结构相关

多条指令进入流水线后,在同一始终周期内争用同一功能部件。这种冲突的通常解决方式为:

  1. 前一个指令访存的时候,后一个指令暂停一个时钟周期(拖慢一拍),再执行。
  2. 增设一个功能部件
数据相关

后续的指令需要的操作数,要等到前面的指令执行完成后并保存结果后才能获得。
数据相关主要分为三种情况:

  • RAW(读后写)
  • WAW(写后写)
  • WAR(写后读)

第一种情况,后面的指令需要使用到前面的所写的数据,但是前面还没来得及写入,下一条指令就已经向内存读取了数据(此时由于新数据没有写入此内存地址,于是读的是旧数据),出现读后写。
第二种情况,两个指令同写一个单元,写的先后次序颠倒
第三钟情况,这种情况与第一种情况恰好相反,原本需要先读取数据再写入,但是现在是先写入后,再读取相应的数据,也就是现在是本应该读取旧数据,现在却读取了新的数据。

常见的数据冲突具体实例看下图:
在这里插入图片描述
通常我们的解决方式为:

  1. 将遇到数据相关的指令以及后续指令,都暂停1到n个周期,直到数据相关问题消失后再执行:
    在这里插入图片描述
  2. 设置专用的通路,当数据发生数据相关的时候,第2条指令的操作数直接从数据处理部件读取而不需要等数据存入再读(这种技术又称数据旁路技术):
    在这里插入图片描述
结构相关

当流水线遇到转移指令和其他改变PC值的指令而造成断流时候,则会引起控制相关:
在这里插入图片描述
通常的解决办法是:机器先选定转移分支中的一个继续执行,待条件码生成后,判断选择是否正确,若正确则流水线继续执行,否则返回分支处重新处理。
注意,Cache的缺失也会因此流水线阻塞。

在流水线操作中,时钟周期应该按所有步骤中所需时间最长的步骤考虑,以保证所有操作可以正确被执行。

典型例题

下面看一道例题:
现在有4级流水线,分别完成 取指,译码取数,运算,回写 共4步。完成时间依次为 100ns,100ns,80ns,50ns,问:

  1. 流水线的操作周期T应该设置为多少?
  2. 相邻两条指令是否会发生数据相关?若不采用硬件改造,第二条指令应该推迟多长时间?如果采用硬件改造,则需要推迟多长时间?

解答
第一问,在流水线操作中,时钟周期应该按所有步骤中所需时间最长的步骤考虑,所以是T= 100ns

第二问,如下图,显然在运算时不能进行取数,而且在回写的时候,不能运算。因此存在数据冲突
在这里插入图片描述
如果不采用硬件改造,那么发生冲突的时候,第二条指令就要暂停等待,于是就有下图:
在这里插入图片描述
后退两个周期,那么第一问就回答了周期应该是100ns,所以延时 2 x 100ns = 200ns。

如果采用硬件改造,那么回写跟运算可以同时进行,也就是:
在这里插入图片描述
此时也就是后退了一个周期,100ns

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值