有什么方法可以更快地处理"predictable branches"?

Any way to handle "predictable branches" faster?

本文关键字:处理 predictable branches 方法 什么      更新时间:2023-10-16

我有一些代码,其中有两到三个分支,你不知道它们会朝哪个方向发展,但在第一次被击中后,可以100%确定或接近于此,相同的路径将再次发生。我注意到,使用__builtin_likely在避免分支未命中方面并没有起到多大作用。尽管当我的函数在短时间内被重复调用时,分支预测做得很好。。一旦在对我的函数的调用之间发生了其他事情,性能就会显著下降。有什么方法可以解决这个问题,或者我可以研究一些技术?有没有办法以某种方式"标记"这些树枝,以备流浪后再次到达?

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

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