优化简单比较,零性能

时间:2015-11-04 23:08:24

标签: c++ if-statement optimization conditional bitwise-operators

我的代码中有一个瓶颈(大约20%的CPU时间),这在以下if语句中:

if (a == 0) { // here
    ...
}

其中auint8_t,因此是0到255之间的数字。

是否有任何低级优化以使其更快? 我想过使用按位NOR (~(a| 0)),但只有当a是1位时才会有效,对吗?

以防万一:在这种特殊情况下我不关心代码可读性。

1 个答案:

答案 0 :(得分:3)

除非你的编译器是垃圾,否则你无法加速整数比较。

但是,您观察到的瓶颈可能不是比较本身,而是不幸的分支预测的结果。

有两种解决方法:

如果"分支或不分支" 遵循模式,请在程序逻辑中进一步向上移动最后一个决定,您可以使用该模式,只需要&#39 ; t分支在你的热门功能中。这可能需要认真思考。找出是否有模式的一种hacky方法:如果你分支就打印1并且为了足够的调用而打0,Zip就会启动并查看生成的存档是否比数字小得多(以位为单位)您打印的值。 (当然,如果你更喜欢理论上的话,还有智能公式。)

如果在大多数情况下选择一个分支,则可以告诉编译器哪个分支是可能的分支。使用gcc,checkout __builtin_expect,对于其他编译器,请阅读手册。

两种解决方案都很重要:您需要衡量这是否真的有帮助。特别是第二个不会神奇地变得更好,它甚至可能使事情变得更糟。