Caching 分支预测器如何知道它是否不正确?

Caching 分支预测器如何知道它是否不正确?,caching,branch,cpu,Caching,Branch,Cpu,所以我确实搜索了这个问题,但我发现的答案我不太明白 我对CPU的理解是,取指令单元只接收来自分支预测器的指令;然后它将通过L1i缓存/L2/L3/RAM查找要执行的预测指令,然后将其删除 然而,我的问题是;分支预测器如何知道它所做的是否正确 分支指令本身仍在执行,即评估条件并确定目标。对于条件分支,如果条件和目标都正确预测,则通常会通知预测器,以便将状态更新为强采取/不采取(如果前一状态为弱采取/不采取)。1 如果错误地预测了条件或目标,则预测器将从执行分支指令中接收正确的信息,从管道中刷新预测

所以我确实搜索了这个问题,但我发现的答案我不太明白

我对CPU的理解是,取指令单元只接收来自分支预测器的指令;然后它将通过L1i缓存/L2/L3/RAM查找要执行的预测指令,然后将其删除

然而,我的问题是;分支预测器如何知道它所做的是否正确

分支指令本身仍在执行,即评估条件并确定目标。对于条件分支,如果条件和目标都正确预测,则通常会通知预测器,以便将状态更新为强采取/不采取(如果前一状态为弱采取/不采取)。1

如果错误地预测了条件或目标,则预测器将从执行分支指令中接收正确的信息,从管道中刷新预测失误路径中的指令,并在正确的地址重新启动获取



1预测者有可能推测性地更新分支信息并纠正预测失误。推测性更新对于全局历史向量是典型的,因为下一次预测需要该信息,而置信度信息通常在预测失误发生之前不需要。置信度信息可用于选择性动态预测、减少检查点、确定另一个线程的优先级、减少功耗等,但通常仅用于防止单个事件改变预测方向。

理解,但预测器如何做到这一点:“如果条件或目标预测错误,预测器将收到正确的信息," ? 它从哪里获得正确与否的信息?@user3423509分支指令的执行测试条件,确定是否应该执行它;take/not take预测与分支指令一起进行,因此可以确定预测是否正确。目标确定的处理方式类似,但对于指令地址相对分支,这可以提前计算,因为恒定偏移量在指令解码后可用(早期使用经典RISC)。抱歉,回复时间太长。然而,我还是不太明白。在这个“分支”指令中到底发生了什么。这是预测序列吗?在预测之前,单位如何知道预测是否正确?我很困惑。。。