乱序执行(OOO)机器中 speculative load 广播策略的常见方案问询
乱序执行(OOO)处理器中LSU与保留站的交互逻辑分析
问题场景
在乱序执行(OOO)处理器中,假设存在一次推测性加载从L1缓存读取到错误数据,同时整数ALU的保留站(RS)中有一条依赖该加载结果的指令等待执行。示例代码如下:
store 5 to address 300 // some other instructions load address 300 to r1 r2 = r1 + r3
两种交互方案分析
方案1:广播推测结果,后续修正
LSU会先广播从地址300读取到的错误r1值(假设地址推测正确),让依赖它的加法指令r2=r1+r3提前执行。后续当LSU检测到加载的数据推测错误时,会在指令提交(commit)前触发流水线回滚,重新执行加载指令以及依赖它的加法指令。方案2:保守等待,避免重执行
LSU不广播推测得到的r1值,保留站中的加法指令会一直等待,直到加载指令确认读取到正确数据后,才会接收结果并执行,以此避免后续的重执行操作。
常见方案结论
方案1是2023年主流处理器的常见实现方式。因为乱序执行的核心目标就是最大化指令级并行性,方案2的保守策略会让依赖加载的指令长时间等待,大幅降低并行执行的效率,违背了OOO设计的初衷。虽然方案1需要处理推测错误后的回滚开销,但现代处理器通过优化回滚机制(如重命名寄存器、检查点恢复等),已经能将这部分开销控制在可接受的范围内,相比牺牲并行性的代价要小得多。
内容的提问来源于stack exchange,提问作者rosepark222
相关产品推荐
相关产品推荐

