【论文导读】Deconstructing Commit

在微架构中,我们使用Reorder Order在commit时保证in order的顺序,一般retire的方式都是等待指令成为oldest,然后retire,这样保证了architecture state和precise exception等。
但是实际上指令可能已经满足了retire的条件,只是因为该指令前面有指令一直没有执行完毕,导致需要持续的等待成为oldest,但是它实际上占据了physical register,register map entry,reorder buffer entry和LSQ slot。将已经执行完毕的指令提早retire可以尽早的释放资源。

接下来分析commit的必要条件

  • 未执行完毕,未执行完毕的肯定是不能commit了
  • WAR Hazard
    如果是write after read,如果我们把program order位于后面的write操作提早完成,那么就会提早的错误的更新寄存器的映射关系,导致program order位于前面的指令读取到的是最新的值。
    即使3提早执行完毕,也不能提交,因为一旦提交就会释放P16,导致2从P12读取r4
  • Unresolved Branch
    如果当前指令前面存在unresolved branch,那么实际上可能是位于mispredicted branch 分支上,而导致错误的更改了系统状态。
  • Exceptions
    如果当前指令前面可能存在异常指令,那么也不能提早commit。比如:
    1)可以在pipeline早期确定的instruction tlb miss, invalid ops以及后期才能确定的page fault和data tlb miss。如果当前指令前面存在未能计算出地址的指令并且访问TLB,也就无法明确是否存在exception
    2)计算指令,即除0或者溢出导致的exception
    3)ecc error
  • Replay Traps
    store-load 和 load-load会导致replay,如果yonger的load先执行完毕,但是older的store/load的地址刚刚出计算出来,而两者的地址相同,那么就需要replay yonger的load以拿到最新的值。
  • Memory Consistency Model
    这是由于consistency导致的replay,为了简化,我们采用weak-ordered model。我们对out of order commit的指令进行以下约束:
    1)不可逾越program order中前方的barrier 指令
    2)不可逾越program order中前方的相同地址的指令

以上各个原因所导致指令被不能commit的占比情况
在这里插入图片描述
最终的实现,相对于传统的ROB,在用于唤醒commit的status中增加了用于表征以上各个条件是否都满足的bit,此外也考虑到了提早commit时,ROB会留下空洞,使用shift的方式来移除ROB空洞。
在这里插入图片描述
最终的效果提升:因为资源提前释放的原因,那些会占满ROB/LSQ的benchmark的提升比较明显。
在这里插入图片描述

欢迎关注我的公众号《处理器与AI芯片》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值