【发布时间】:2020-04-04 16:53:54
【问题描述】:
我正在阅读 Patterson 和 Hennessy 所著的《计算机组织与设计:硬件/软件接口第 5 版》第 5 章中的动态分支预测部分时,我遇到了下图显示 2 位预测器的状态:
2 位预测器在两次预测错误后应该改变它的预测。但是根据这个图,当我们从左下状态开始时,如果机器在分支应该是“TAKEN”的时候预测“NOT TAKEN”两次,那么就达到了右上角的PREDICT TAKEN状态。然而,这里机器会改变状态到右下角PREDICT NOT TAKEN,即使它错误地预测了分支应该只被“NOT TAKEN”一次。
这不是错误的行为吗?这是否意味着状态机错误或我遗漏了什么?
当分支被 TAKEN 两次时,在底部 NOT TAKEN 深色状态,您可以看到达到的状态是浅色“不确定”状态,而根据我的说法,它应该是深色“确定”状态,因为该分支连续两次执行相同的操作。
【问题讨论】:
-
你认为什么行为是错误的?浅色状态表示 CPU“不确定”是否应该采用分支。在那种情况下,一个错误的预测就足以让它“改变主意”。当它处于深色状态时,它对分支更加“确定”,因此需要连续两次错误预测才能让它改变预测。显然,很容易找到病态的例子(例如,如果您从浅色状态开始并且具有交替模式,采取-未采取-采取-未采取-...,您可能会失败 100% 次)。
-
在底部 NOT TAKEN 深色状态下,当分支被 TAKEN 两次时,您可以看到达到的状态是浅色“不确定”状态,而根据我的说法,它应该是深色“确定”状态,因为分支连续两次执行相同的操作。
标签: cpu-architecture branch-prediction