发射过程中的流水线

本文讨论了一种非数据捕捉结构的流水线,涉及指令队列中指令的执行条件,包括源操作数准备、仲裁和唤醒过程。重点介绍了通过旁路网络和PRF实现提前唤醒,以及如何优化发射过程以减少硬件资源消耗。
摘要由CSDN通过智能技术生成

  • 非数据捕捉结构的流水线
    • 此种数据结构中,issue queue中的指令,要被FU执行,需要等到一下几个条件都成立:
      • 这条指令所有的源操作数都准备好了;
      • 这条指令能够从发射队列中被选中,即需要经过仲裁电路的允许才能够进行发射;
      • 需要能够从寄存器、payload RAM或者旁路网络(bypassing network)中获得源操作数的值。
    • 这三个条件是顺序发生的;
    • wakeup: 源寄存器从没有准备好的状态,变成准备好的状态;
      • 实现方式:通过bypass网络,或者PRF, 通知IQ中的每个源寄存器;
      • 发射过程,最典型的流水线划分,就是wakeup和select;
    • wakeup的提前 
      • 通过处理器中的旁路网络(bypassing network),能够使唤醒的过程提前。
      • 当指令 B 到达执行阶段(execute)的时候,可以从旁路网络中得到指令A 的结果,此时指令B就可以顺利地进入到FU中执行了;
      • 需要注意的是上述的这个过程,是在一个周期之内先使用仲裁电路从发射队列中选择出一条合适的指令(这是仲裁阶段的工作),然后再将发射队列中相关的寄存器置为准备好的状态(这是唤醒阶段的工作),这里是有先后顺序的;
      • 即:selcet和wakeup组成了一个原子操作;
      • 如果分成两个周期,则:
      • 在一般的指令集中,不同的指令需要的执行周期数是不一样的,普通的加减法、逻辑运算等比较简单的操作,需要一个周期就可以了,而乘除法这样的操作需要多个周期,还有比较特殊的 load 操作,其执行的周期数取决于 D-Cache(或 StoreBuffer)是否命中等,对这些情况都需要进行处理;
      • 例如,乘法指令,如果还是提前1cycle进行唤醒:
  • 数据捕捉结构的流水线
  •  
    • 发射过程也需要分为仲裁(Select)和唤醒(Wake-up)两个流水段,只不过指令在被仲裁电路选中之后,不需要去读取物理寄存器了,而是直接读取payload RAM即可以得到操作数。
    • 有的数据从payload ram中读取,有的数据从bypass 网络中获取;
    • 图 8. 19 中将指令的选择和读取 payload RAM 放到了一个流水段,在这个阶段还负责将FU的计算结果“捕捉”到payload RAM中,很显然在这个周期做了很多事情;
      • 尤其是这个周期需要对payload RAM既进行读取、又进行写入,这个多端口的payload RAM会导致处理器的周期时间变得过大。
      • 同时,当FU的个数比较多时,FU结果的旁路网络也会占用不菲的硬件资源和过多的时间,因此可以进一步对流水线进行细分:将payload RAM放在下一个周期

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值