【问题标题】:Branch prediction and performance分支预测和性能
【发布时间】: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


    【解决方案1】:

    由于循环只执行了 2 次​​p>

    你的意思是外循环条件,你没有显示 asm 的那个?我现在只回答部分问题,以防这种混乱是你的主要问题。如果这不是您感到困惑的地方,请发表评论。


    内部循环底部的条件分支执行了 20 次,模式如下:9xT、1xNT、9xT、1xNT。交替预测器大约有 50% 的时间会出错,+/- 20% 取决于它的开始是对还是错。

    这是只运行两次的外循环:T,NT。整个内循环运行两次。

    根据交替预测是从 T 开始还是从 NT 开始,外部循环分支的预测要么完美,要么非常糟糕。

    【讨论】:

    • 哦,我的内部循环理解错了。我现在明白了。我对 B) 和 C) 的 1 位分支预测和 2 位预测的理解是否正确? (忽略错误的循环)
    • 对于问题 a)。假设它以 NT 开始,但假设要采用该分支,那么系统是否会返回并随后采用该循环?这是否意味着运行内部循环分支需要两倍的时间?
    • @NguyenTran:CPU 总是“看起来”以正确的程序顺序运行指令。一旦检测到错误预测,所有错误推测的工作都会被丢弃,并从分支的正确一侧开始执行。错误预测通常比正确预测的分支花费更多的周期。 (例如,长流水线需要 15 个周期与 1 个周期)。
    • re:B 和 C:既然您已经意识到您对内部循环的误解,您能否编辑问题以确保您明确提出了正确的问题?既然您了解了内部循环,我不想猜测您的实际想法。
    猜你喜欢
    • 2013-11-14
    • 2012-08-28
    • 2015-11-24
    • 2019-04-23
    • 2019-12-13
    • 2020-02-12
    • 2014-04-25
    • 2014-03-03
    • 2017-04-26
    相关资源
    最近更新 更多