【发布时间】:2015-11-13 10:29:17
【问题描述】:
与此答案相关:https://stackoverflow.com/a/11227902/4714970
在上面的答案中,提到了如何通过避免分支来避免分支预测失败。
用户通过替换来证明这一点:
if (data[c] >= 128)
{
sum += data[c];
}
与:
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
这两者如何等价(针对具体数据集,并非严格等价)?
在类似的情况下,我可以通过哪些一般方法来做类似的事情?是否总是使用>> 和~?
【问题讨论】:
-
hackersdelight.org 是一个很好的短函数集合,经常利用聪明的位黑客。我认为还有另一个系列更侧重于你所说的比特黑客,但我想不起来。
-
一些编译器可以用无分支的
cmov指令替换条件运算符?:。 -
hackersdelight.org 似乎已经死了。悲伤的时光。
标签: java performance branch-prediction