Reorder buffer and Reservation station

ReorderBuffer(ROB)用于处理异常问题,指令在解码阶段写入,完成时写回结果。RegisterRename解决假冲突,避免真实依赖。OutofOrderExecution设计目的是提高性能,但需管理内存依赖,如Store/Load问题,因地址动态性及ALU输出作为地址导致的依赖判断复杂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Reoder buffer(ROB)

为了解决异常问题

instruction 的decode阶段被写入缓冲区的条目,指令完成的话,向缓冲区写入结果,最早decode的指令(程序顺序)如果没有被标记异常的话,写入reg file

 

 

register rename

是为了解决假的冲突,什么是假的冲突呢,请看下面这三个例子

 

只有第一个是冲突的。  Output and anti dependencies are not true dependencies

改名可以这样改

Register ID ——》 ROB entry ID      Architectural register ID ---》 Physical register ID

整体流程

 

 

 Reorder buffer的trade off 

 Out of Order Execution

设计初衷

 

面临的问题,需要做到的事

 过程

比如r8 + r9 ---> r10 r10在这个指令结束前都不会得到,那么我们就要将valid标记为0,然后tag就是保留站的offset.

 完成的话就broadcast这个tag和value

   如果广播后有指令的源reg都valid的话,就wake up这个指令

 

 

 

out of order store/load问题

memory很难rename,因为地址太多了,同时在5级流水线中,要aluout作为address,是动态而不是静态的依赖判断 

summary

### 重排序缓冲区概念 在计算机体系结构中,重排序缓冲区(Reorder Buffer, ROB)是一个用于支持乱序执行的关键组件[^1]。ROB的主要功能是在指令完成其操作之前保存这些指令的状态,并确保它们按照程序顺序提交结果。 ### 工作原理 当处理器检测到可以提前执行的后续指令而不必等待当前正在处理的操作时,就会发生乱序执行。为了维持正确的程序语义并解决由此产生的依赖关系问题,ROB跟踪所有未决指令的状态直到它们能够安全地更新架构状态为止。具体来说: - **分配阶段**:每当一条新指令被解码器发送给执行单元前,它会被赋予一个唯一的序列号并将该条目加入到ROB中。 - **写回/读取结果**:一旦某个计算完成后,相应的寄存器文件会得到更新;同时也会向ROB报告此事件以便于稍后的验证过程。 - **提交阶段**:只有当每条指令都成功完成了自己的任务之后才会按原始次序依次从ROB顶部弹出并向外提供最终的结果数据流。如果遇到异常情况,则整个事务都将被撤销并且重新开始。 通过这种方式,即使实际硬件层面允许一定程度上的并发性和灵活性,在逻辑上仍然保持了严格的先后秩序来保障应用程序的一致性与可靠性。 ```assembly ; 假设有一个简单的汇编代码片段展示如何利用ROB机制 MOV EAX, [EBX] ; 加载内存地址中的值到EAX寄存器里 ADD ECX, EDX ; 对ECX加上EDX的内容 CMP ESI, EDI ; 比较ESI和EDI两个寄存器里的数值大小 JG label ; 如果上面比较结果显示大于则跳转至label处继续运行 ``` 在这个例子中,尽管`ADD`可能早于`MOV`完成因为后者涉及到了访存延迟较高的动作,但是由于存在ROB的存在使得最后提交的时候还是遵循着原本应该有的先后顺序来进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值