【发布时间】:2016-09-14 16:51:36
【问题描述】:
我正在阅读一本关于计算机体系结构的书,我在本章中讨论的是分支预测。 有一个小练习,我很难理解它。
考虑以下内部 for 循环
for (j = 0; j < 2; j++)
{
for (i = 10; i > 0; i = i-1)
x[i] = x[i] + s
}
-------> 内循环:
L.D F0, 0(R1)
ADD.D F4, F0, F2
S.D F4, 0(R1)
DADDUI R1, R1, -8
BNE R1, R3, Loop
假设寄存器F2保存的是标量s,R1保存的是x[10]的地址,R3预计算在i == 0时结束循环;
a) 在采用/未采用之间交替的预测器将如何执行?
---- 由于循环只执行了 2 次,我认为替代预测会损害这种情况下的性能(?) 1 未命中预测。
b) 1 位分支预测缓冲区会提高性能(与 a 相比)吗?假设第一个预测“未采用”,并且没有其他分支映射到该条目。
---- 假设第一个预测“未采用”,如果预测错误,则 1-bit 预测器反转该位。所以它将是 NT/T/T。这是否使它具有与问题 a) 相同的性能?有 1 次未命中预测。
c) 2 位分支预测缓冲区会提高性能(与 a 相比)吗?假设第一个预测“未采用”,并且没有其他分支映射到该条目。
---- 以“未采用”开头的 2 位分支预测。正如我记得两次丢失后的 2 位预测变化一样。所以这个预测会像 NT/NT/T/T 一样。因此,与 a) 相比,它的性能会更差。 1 次预测失败
这是我试图回答这些问题的尝试。如果我的答案是正确/错误,谁能更详细地向我解释?谢谢。
【问题讨论】:
标签: cpu-architecture branch-prediction