有没有办法更快地处理“可预测的分支”?

时间:2012-07-19 21:39:54

标签: c++ performance optimization conditional x86-64

我有一些代码,其中有两个或三个分支,你不知道它们会以什么方式进行,但是在第一次被击中之后,它是100%确定的,或接近于那个,同样的道路将再次发生。我注意到在避免分支未命中方面使用__builtin_likely并没有太大作用。即使分支预测在短时间内重复调用我的函数时也能很好地工作......只要在我的函数调用之间发生其他事情,性能就会大幅下降。有什么方法可以解决这个问题或者我可以研究的一些技巧?有什么办法以某种方式“标记”这些分支,以便在一些流浪之后再次到达这些分支?

2 个答案:

答案 0 :(得分:2)

您可以使用模板为每个代码路径生成不同版本的函数,然后在找到条件的运行方式时使用函数指针在运行时选择一个。

答案 1 :(得分:0)

分支预测器和编译器内在函数就是你所拥有的。最好的情况是,您可以查看程序集并尝试自己动手进行一些优化,但是您找不到多少。