gpt4 book ai didi

cpu-architecture - 重新排序缓冲区提交

转载 作者:行者123 更新时间:2023-12-04 07:21:28 26 4
gpt4 key购买 nike

当乱序执行处理器带有重新排序缓冲区 (ROB) 和分支推测时,我知道在 ROB 执行提交之前不会进行更改。

功能单元 (FU) 的结果将它们的结果写在公共(public)数据总线 (CDB) 上,并在完成执行后写在 ROB 上。然后 ROB 可以决定分支是否被成功预测,如果是则提交,否则 ROB 被刷新。

我不明白的是,来自 FU 的 CDB 广播的保留站更新发生了什么,它们不应该以某种方式刷新/回滚吗?

一个我能接受的例子(也许不是最好的)

addi $s1, $zero, 8
addi $s2, $zero, 9

addi $s3, $zero, 0
bneq $s1, $s2, L1
addi $s3, $s3, 1 // first increment
L1:
addi $s3, $s3, 2 // second increment

$s3初始化为0,然后分支的错误预测导致 $s3 增加 1。结果被广播到 RSs。

$s3 现在准备开始执行第二个增量 2。同时检测到分支预测错误并刷新 ROB,但是加法器的 RS 没有改变,所以 $s3 现在有一个错误的值,并且从未在要刷新的 ROB 中。

这是怎么解决的?

我怀疑我遗漏了一些关键的东西,我不是很有经验,我刚毕业并且在修改时想出了这个。

enter image description here

最佳答案

当分支被预测为采取时,对$s3的更新(第一个增量)将不会更新实际的寄存器$s3,该数据将被缓冲在重新排序缓冲区。当检测到错误预测时,重新排序缓冲区将被刷新。无论如何,据我所知,在解决分支之前,原始寄存器不会更新,因此使用了重新排序缓冲区。

关于cpu-architecture - 重新排序缓冲区提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40887592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com