分支目标预测(BTP)与分支预测(BP)不同。我知道BTP会找到分支将跳转到的位置,而BP只决定可能采用哪个分支。
BTP是否依赖于BP,如果BTP没有使用BP来预测采取哪个分支,它怎么可能知道分支的目标?
我不明白为什么会有这么大的差异?一旦预测分支被认为是没有找到目标就像读取指令中的地址一样简单吗?
答案 0 :(得分:0)
分支目标并不总是在代码中编码,您可以使用间接分支或调用和返回,这取决于寄存器或内存读取的值。在这些情况下,在实际到达分支之前预测地址是非常困难的。还要记住,CPU通常是流水线的,这意味着即使前端到达分支(并且需要决定跳转到哪里),其结果可能与分支目标相关的先前指令仍然不在执行或内存读取阶段,所以如果有这样的依赖,你可能需要停止。
至于预测 - 我不会说它完全不相关,但是存在巨大的差异,分支分辨率(采取/不采用)是一个比特,目标更大,在程序生命周期中可能有许多不同的值。例如x86 ret
可能需要跳转到任何调用其函数的地方(我给出了这个例子,因为有些CPU在这种情况下有优化 - 查找返回堆栈缓冲区)。学习机制也可能非常不同,具体取决于您实施的预测因素,但更重要的是 - 模式可能不同 - 您可能在99%的案例中都有一个分支,但每个目标都有不同的目的地时间,或分支占50%的时间,但几乎总是跳到同一个地方。
然而,您可以使用相同的启发式跟踪两种类型的预测,通常是对分支历史模式的一些操作,因此大多数CPU可能会在预测变量之间保持密切关系。