流水线的扩展(3):寄存器重命名 (Register Renaming)

本文探讨了流水线中的冲突及其原因,尤其是结构性和RAW冲突。为了解决这些问题,提出了寄存器重命名的概念,通过改变指令中的寄存器名称避免数据覆盖。介绍了两种实现方式,包括使用集中式Register File和分布式Reservation Station,并详细阐述了使用Register File进行重命名的流程和结构,强调了在处理程序中断时保持状态的重要性。最后,讨论了重命名表的实现挑战及优化策略。
摘要由CSDN通过智能技术生成

系列目录

前言

上一章讲到了可以通过ScoreBoard 去检测各种各样的冲突。可是呢,解决这些冲突的方法依然是停顿等待冲突解决。但是我们肯定是希望不停顿以提升效率,这时候就有必要要研究一下各种冲突造成的原因,来寻求解决。

冲突产生的原因

  1. Structural:就是功能单元被占用了,硬件不可能无中生有,只能通过等待来解决
  2. RAW:和上面一样,需要的数据不可能凭空产生
  3. WAR/WAW:产生的原因是因为原来的值被错误覆盖,要解决这个问题似乎只能靠增加储存空间。乍一看好像挺无解的,毕竟寄存器的数量不可能凭空增加。但是我们回忆一下,决定寄存器的数量的是指令集架构,但是我们可以让微架构拥有更多的寄存器来缓解这两种冲突。

寄存器重命名

简单来说就是机器在硬件上修改指令源寄存器和目的寄存器的名字以保证前后指令不会因为覆盖而出错。

在这里有两种不同的实现方法:

  1. 使用集中式的大Register file,真正的通过修改指令中寄存器的索引名,来达到重命名的机制。
  2. 使用分布式的reservation station 直接储存寄存器的值,哪里需要操作数直接将所需操作数备份到reservation station里就行。这个方法正是大名鼎鼎的Tomasulo 算法里使用的技巧,也是最早的寄存器重命名的形式。

这里我们将使用第一种方法讲解,后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值