gpt4 book ai didi

c++ - 分支预测和分支目标预测之间的性能差异?

转载 作者:可可西里 更新时间:2023-11-01 16:15:26 25 4
gpt4 key购买 nike

我正在编写一些音频代码,其中基本上所有内容都是一个小循环。据我所知,分支预测失败是一个足够大的性能问题,我努力保持代码分支自由。但我只能走这么远,这让我想知道不同类型的分支。

在c++中,固定目标的条件分支:

int cond_fixed(bool p) {
if (p) return 10;
return 20;
}

并且(如果我理解 this question 正确的话),变量目标的无条件分支:

struct base {
virtual int foo() = 0;
};

struct a : public base {
int foo() { return 10; }
};

struct b : public base {
int foo() { return 20; }
};

int uncond_var(base* p) {
return p->foo();
}

是否存在性能差异?在我看来,如果这两种方法中的一种明显比另一种更快,编译器将简单地转换代码以匹配。

对于那些分支预测非常重要的情况,了解哪些有关性能的详细信息是有用的?

编辑:x 的实际操作:10? 20 只是一个占位符。分支之后的实际操作至少足够复杂,以至于两者都做是低效的。此外,如果我有足够的信息来明智地使用 __builtin_expect,在这种情况下分支预测将不是问题。

最佳答案

旁注:如果你有这样的代码

if (p) a = 20; else a = 10;

然后没有任何分支。编译器正在使用条件移动(参见:Why is a conditional move not vulnerable for Branch Prediction Failure?)

关于c++ - 分支预测和分支目标预测之间的性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21755471/

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