gpt4 book ai didi

x86 - 分支目标预测与分支预测结合?

转载 作者:行者123 更新时间:2023-12-03 01:37:28 25 4
gpt4 key购买 nike

编辑:我感到困惑,因为通过预测采用哪个分支,您肯定也在有效地进行目标预测?

这个问题与我关于该主题的第一个问题有着内在的联系:

branch prediction vs branch target prediction

查看已接受的答案:

Unconditional branch, fixed target

  • Infinite loop
  • goto statement
  • break or continue statement
  • End of the 'then' clause of an if/else statement (to jump past the else clause)
  • Non-virtual function call

Unconditional branch, variable target

  • Returning from a function
  • Virtual function call
  • Function pointer call
  • switch statement (if compiled into a jump table)

Conditional branch, fixed target

  • if statement
  • switch statement (if compiled into a series of if/else statements)
  • Loop condition tests
  • The && and || operators
  • The ternary ?: operator

Conditional branch, variable target

  • Less likely to show up under normal conditions, but the compiler may synthesize one as an optimization, combining two of the above cases. For example, on x86, the compiler may optimize code like if
    (condition) { obj->VirtualFunctionCall(); }
    into a conditional indirect jump like jne *%eax if it appears at the end of a function due to tail call optimization.

如果我有以下代码:

if(something){
//a
}
else{
//b
}

(BP =“分支预测”和 BTP =“分支目标预测”)

它非常明显的 BP 用于评估条件某物。不过,我试图了解 BTP 是否也参与确定分支 a 中发生的情况。 BTP是否也恰好根据BP的结果确定了位于分支a/b的代码的地址?

我在此维基百科页面上询问( http://en.wikipedia.org/wiki/Branch_target_predictor ):

In computer architecture, a branch target predictor is the part of a processor that predicts the target of a taken conditional branch or an unconditional branch instruction before the target of the branch instruction is computed by the execution unit of the processor.

这表明在预测条件后使用 BTP 来预测目标。

1)有人可以澄清上述内容吗?

第二个相关问题 - BP 和 BTP 与 CPU 的获取/解码/执行/回写管道交互的方式有何不同? BP 是从取指阶段开始还是从解码阶段开始?在条件代码的执行阶段之后,我们可以检查预测是否正确并更新分支预测缓存。

2) BTP 在获取/解码/执行/回写 CPU 阶段如何工作?

最佳答案

请阅读英特尔优化手册,当前下载位置 is here 。当过时时(他们一直在移动东西),然后在英特尔网站上搜索“架构优化手册”。请记住,那里的信息相当通用,它们仅披露允许编写高效代码所需的信息。分支预测实现细节被视为商业 secret ,并且在架构之间确实会发生变化。在手册中搜索“分支预测”以查找引用资料,它在各个章节中分布相当广泛。

我将总结手册中的内容,并在适当的地方添加详细信息:

分支预测是核心中的BPU单元(Branch Prediction Unit)的工作。与您问题中的“BP”大致相关。它包含几个子单元:

  • 分支历史表。该表跟踪先前采用的条件分支,并由预测器引用来决定是否可能采用分支。指令引退单元向 Is 提供条目,该指令引退单元知道分支是否实际被采用。随着架构的改进,这是变化最大的子单元,随着更多的可用空间变得更深入、更智能。

  • BTB,分支目标缓冲区。该缓冲区存储先前进行的间接跳转或调用的目标地址。这与您问题中的“BTP”相关。手册没有说明缓冲区是否可以在每个地址存储多个目标,由历史表索引,我认为这可能适用于以后的架构。

  • 返回堆栈缓冲区。该缓冲区充当“影子”堆栈,存储 CALL 指令的返回地址,从而使 RET 指令的目标可以高度可信地可用,而处理器不必依赖 BTB,而 BTB 不太可能对调用有效。据记录,它有 16 层深。

Bullet 2) 有点难以准确回答,手册只讨论了“前端”,并没有分解管道的细节。足够合适了,它严重依赖于架构。第 2.2.5 节中的图表可能具有说明性。执行跟踪缓存发挥了作用,它存储先前解码的指令,因此是 BPU 协商的主要来源。否则就在指令翻译器(又名解码器)之后。

关于x86 - 分支目标预测与分支预测结合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21787457/

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