[学习笔记:处理器设计]寄存器重命名

寄存器重命名(Register Rename)

  1. 重命名缓存类型(Rename Buffer Type)

    • merged architectural and rename register file
      每个物理寄存器处于4状态中的一个,4个状态如下:
      available: uncommitted state
      AR(architectural register): 作为指令集寄存器
      RB(rename buffer), not valid: 作为RB,但是寄存器不包含指令返回的结果。
      RB, valid: 作为RB,寄存器包含指令返回的结果。
      Rename buffer的一般类型,灰色为Rename Buffer

      初始化时,前n个物理寄存器被分配成AR状态。n为指令集中定义的寄存器个数。剩余的寄存器处于avaliable状态。
      当一条包含目的寄存器的指令被发射时,需要从avaliable的寄存器中分配一个物理寄存器。相应地,它的状态被设置成“RB, not valid”,valid bit被清除。等到相应的指令执行完,结果写进分配好的rename buffer中。这时valid bit被置1,状态转到“RB,valid”。接着,当该指令执行完时,被分配的rename buffer将进入AR状态。最后,当旧的AR回收时,被置成Available状态。
      如果指令发生错误(faulty)或者异常(exception),未完成的指令必须被取消。已经被分配的rename buffer处于RB,valid或者RB,not valid的状态将变成available状态。另外,相应的映射表或者rename buffer也将被取消。
      状态转移图相比于其他类型,merged模式不需要AR和RB之间的数据传输。

    • stand-alone rename register
      Rename buffer可以和指令集buffer分开。指令执行完需要有从RB到AR的回写。

    • keeping renamed values in ROB
      ROB(reorder buffer)是用来暂存已经发射的指令,确保指令顺序执行的循环buffer。每个ROB的entry都存放正在执行的指令,当然可以扩充一个位域用来存放返回结果。ROB也可以进一步扩展作为终于暂存站(central shelving buffer)。

    • keeping renamed values in shelving buffers
      Rename Buffer也可以用指令缓存区来实现。这样做有个明显的缺点,就是指令缓存在指令分发出去时就可以回收,而RB必须等到指令执行完才可以回收。

  2. 拆分rename 寄存器
    前面为了简单起见,统一叫AR。在实际cpu中,定点的寄存器和浮点的寄存器往往是分开存放的。但是无论定点指令还是浮点指令都统一存放在一个ROB中,因此ROB要有足够的深度来保持定点和浮点的数据。

  3. RB的数量
    RB保存寄存器结果直到指令完成。考虑到并非所有指令都是寄存器指令。因此,正在执行的尚未完成的最大指令数是我们需要的RB数量。这些尚未执行完的指令包括:

    • 放在暂存架上尚未执行的指令
    • 在执行单元中的指令
    • 在load queue中的等待cache访问的指令
    • 在store queue中的等待结束的指令
      因此最大未完成指令数为:
      npmax = wdw + nEU + nLq + nSq
      wdw:暂存架深度
      nEU:并行执行单元个数
      nLq:load queue的深度
      nSq:store queue的深度
      假设最差情况,RB个数需要:
      nrmax = wdw + nEU + nLq
      store指令不需要RB。
      如果CPU中用了ROB,那么ROB的深度和npwax一样。
      如果设计中ROB个数或者RB的个数少于上面的公式,在最差情况下,有可能造成因资源不足而导致的阻塞,对性能有一些影响。典型的场景中,满足如下公式:
      wdw < nr < nROB
  4. 读写端口数
    读写端口数是在一个周期内,根据操作数的个数决定的。这还跟操作数获取策略(Operand fetch policies)有关。策略分为发射获取(issue-bound fetch)和分发获取(dispatch-bound fetch)两种。如果是发射获取,那么操作数在存入暂存站时就把寄存器也同时存入暂存站,而分发获取则在暂存站只保留寄存器号,等到分发时才读取寄存器。发射获取模式下,寄存器读写端口跟发射数有关。比如4发射,定点指令如果最多有3个操作数,那么需要12个读4个写端口。分发获取则考虑执行单元的并发数。

  5. 寄存器映射方法(Register mapping methods)
    在寄存器重命名期间,处理器需要分配物理寄存器,同时在指令结束前,跟踪架构寄存器到物理寄存器的映射关系。因此重命名包括三个组件:

    • 重命名buffer的分配
    • 映射关系的跟踪方法
    • 重命名buffer的回收
      因为寄存器只有在指令发射时才会用到,因此在发射之前重命名会浪费RB的空间。
      跟踪寄存器映射关系通常有两类方法。一是构造映射表。表的深度为架构寄存器的数量,根据架构寄存器索引物理寄存器。另一类是物理寄存器上增加一些标识,来记录映射关系。
      寄存器映射关系跟踪a是映射关系表。b是在物理寄存器上扩展出5个位域。
      Entry valid: 表示改物理寄存器已经分配了。
      Dest register no: 表示架构寄存器号。
      Lastest bit:在重复重命名时会出现多个有效表示,last表示最后一次分配。
      Value: 寄存器的值
      Value valid: 寄存器值是否有效,当指令执行完并返回结果时,有效位置1.
  6. 重命名率
    重命名率是指在一个周期内,处理器可以操作的最多的重命名数量。重命名率应该等于发射率(issue rate)。但是实现高的重命名率并不容易。首先分析指令之间的依赖关系将变得复杂,其次需要更多的寄存器读写端口。

  7. 可能的实现
    寄存器重命名实现方法

  8. 应用实践
    在这里插入图片描述从Free list里按顺序找到可用的物理寄存器,写到rename table中,同时在ROB中跟踪映射关系。

参考文献:The Design Space of Register Renaming Techniques, Sima, IEEE 2000.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

poena

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值