动态调度

为了节约成本的同时提高性能,方法之一是动态调度技术。

 

动态调度:从字面上来说就是让硬件动态的决定执行什么指令,按什么顺序执行,而不是由编译器静态的决定。(后者为静态调度,如循环展开)本质上来说动态调度使得指令乱序执行,这很像数据流machine,后者不是按照发射顺序执行,而是按照数据的availability来执行,当然实际中还要考虑资源的有限量。因而,请记住指令的执行依赖于1:原操作数的可用性。2:所需功能单元的可用性。

动态调度可以利用到编译时无法发现的并行性。有两种动态调度技术:

一:计分板

计分板会监视所有待调度的指令,一旦它发现所需资源都已到达就调度指令以执行,然而计分板不能解决WAR与WAW。

计分板实际上是存储当前指令信息的地方。计分板可以决定指令何时何地起始与终止。在计分板中,指令要经过四个阶段:

1:发射----在发射阶段,计分板检查WAW和可用功能单元,若无可用单元或存在WAW则stall。

2:读操作数----在这一阶段,计分板检查操作数可用性,若源操作数到达,则计分板让功能单元去读寄存器文件并且开始执行,这样解决了RAW,记住,此时源操作数available的定义是:没有指令要写它,或它正在被写入寄存器。

3:执行

4:写结果:执行完后会检查是否有WAR,若有就stall,直到其清除。

二:Tomasulo算法

Tomasulo算法与计分板的区别是它引入了寄存器重命名技术来消除WAW与WAR,因为这两种都不是真正的相关,只是由于寄存器重名造成的,因此我们的核心思想是,如果有一些额外的物理寄存器专门代替重名的寄存器,那么我们就可以消除伪相关。此时寄存器一部分给编译器用,一部分用于重命名。在Tomasulo算法中,上述重命名寄存器称为保留站,保留站是fetch和store操作数的缓存。源操作数要么指向寄存器堆,要么指向保留站,每一站对应一条指令,一旦所有原操作数到达且资源有效,指令送去执行,一旦执行完成,结果送入保留站缓存。因此,不同于计分板,功能单元不用因为WAR而stall,而可以自由执行另一条指令。然后保留站会把结果送到寄存器堆或其他需要这个结果的保留站。由于保留站可以从寄存器堆或其它保留站获得操作数,因而消除了WAR。在Tomasulo算法里,控制逻辑分布在各个保留站,而在计分板中,计分板记录一切。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值