位操作以避免分支错误预测
我在这个网站上发现了另一个关于分支预测失误的问题。 在答案中,给定的解决方案是替换if语句(分支),如下所示
const unsigned arraySize = 32768;
int data[arraySize];
for(int i = 0; i < arraySize; ++i)
if (data[c] >= 128) // <- to be replaced
sum += data[c];
与按位运算符。
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
因此,对于数据数组中的值大于或等于128的数值,t将为0.因此,t等于111 ... 1,因此按位与数据[c]保存该值。 但是, 如果数据数组中的值小于128,是不是等于1? 所以〜t应该是111 ... 0,但是我们不应该用数据[c]按位与 - 000 ... 0以不添加?
链接地址: http://www.djcxy.com/p/6203.html