2

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

4

2 回答 2

2

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

于 2012-07-19T22:03:56.873 回答
0

分支预测器和编译器内在函数就是你所拥有的。充其量,您可以查看程序集并尝试自己手动进行一些优化,但您不会发现太多。

于 2012-07-19T21:41:58.333 回答