推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

寄存器重命名-消除假依赖机制

更新时间:2026-06-08 07:53:16 大小:18K 上传用户:江岚查看TA发布的资源 标签:寄存器 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

一、依赖与假依赖的基本概念

在现代超标量处理器中,指令级并行(ILP)是提升处理器性能的核心手段,而指令之间存在的依赖关系是限制指令级并行开发的主要障碍。依赖可以分为三类:真数据依赖(读写依赖,也叫流依赖)、输出依赖(写写依赖)、反依赖(写读依赖),其中后两种依赖统称为假依赖(也叫伪依赖)。

1.1 真依赖与假依赖的区别

真数据依赖是指前一条指令的结果是后一条指令的输入,即i指令写某个寄存器,j指令(j>i)读这个寄存器,这种依赖是程序逻辑本身要求的,无法消除,必须等待前序指令执行完成才能执行后序指令。而假依赖不是程序逻辑本身固有的依赖,只是因为处理器中寄存器数量有限,多条指令重复使用同一物理寄存器导致的,因此可以通过架构设计消除。

我们举两个简单的例子说明:

1. 反依赖(写读假依赖)

add r1, r2, r3 ; 指令1:读r1,结果写入r1

sub r4, r1, r5 ; 指令2:读r1,结果写入r4

如果交换两条指令顺序,sub读取的r1就变成了add写入后的新值,程序语义发生改变,因此看起来存在依赖。但实际上,这种依赖的本质是add要写r1,而sub要读旧的r1,只是因为共用了同一个寄存器名,才产生了依赖,不是程序必须的依赖。

2. 输出依赖(写写假依赖)

add r1, r2, r3 ; 指令1:结果写入r1

mul r1, r4, r5 ; 指令2:结果写入r1

两条指令都要写同一个寄存器r1,如果交换顺序,最终r1保存的就会是add的结果而不是mul的结果,改变了程序语义。但这种依赖同样是因为共用寄存器名产生的,不是程序逻辑本身需要的依赖。


部分文件列表

文件名 大小
寄存器重命名-消除假依赖机制.docx 18K

【关注公众号领20积分】

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载