小编uni*_*ise的帖子

分支预测器是否会启动?

大多数(如果不是全部)现代处理器都使用一种称为"分支预测"的技术,用它来猜测if-then-else分支的方法.

我有一个问题考虑这个计划.假设我们有这段代码,没有特定的语言:

if(someCondition)
{
    // some action
    return someValue;
}
// some other action
return someOtherValue;
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,该代码等同于此代码:

if(someCondition)
{
    // some action
    return someValue;
}
else
{
    // some other action
    return someOtherValue;
}
Run Code Online (Sandbox Code Playgroud)

分支预测器将在第二个示例中"预测"分支,但第一个示例又如何呢?会猜到吗?什么将被加载到管道?是否有任何速度可以通过任何一个例子忽略块中实际代码的影响?

我的猜测,它取决于编译器:如果使用跳转实现语句(在汇编中),只有在寄存器中的compare标志置位时才进行跳转.现在汇编指令究竟是什么样的取决于编译器.除非每个编译器都有一种常用的处理方式,我怀疑它是否存在,否则这是编译器依赖的.在这种情况下,最新的Visual Studio C++和GC++编译器会发生什么?

作为hexafraction指出,以及如何返回值之间的关系someCondition确定...分支预测器可能不踢.我们只考虑true和false作为返回值.对于条件,让我们假设它是一个已经预定的字段,在函数内部或外部,局部变量和一些算术语句.

老实说,我并不怀疑条件是局部变量的情况与该字段已在同一函数中预定的情况之间存在很大差异.

optimization performance compiler-optimization branch-prediction

9
推荐指数
1
解决办法
168
查看次数