繁体   English   中英

最小化C ++中的分支-如果值不为零,则递增

[英]Minimize branching in C++ - Increment if value is non-zero

我有以下嵌套的for循环:

for(k = 0; k < n; ++k) {
    for(m = 0; m < n; ++m) {
        /* other logic altering a */
        if(a[index] != 0) count++;
    }
}

其中a包含uint32_t 由于n可以很大(但是恒定),并且这是唯一的分支(除了将kmn进行比较),我想对其进行优化。

的零和非零在分配a可以被认为是均匀随机的。

我的第一个方法是

count += a[index] & 1;

但是对于所有奇数, count只会增加。

另外:我也有一种情况,其中a包含bool ,但是根据C ++,条件 truefalse定义为非零和零,这基本上等同于上述问题。

如问题注释中所述if(a[index] != 0) count++; 不会产生分支(在这种情况下),该分支已在程序集中进行了验证。

为了完整起见,与上述语句等效的是count += a[index] != 0; (根据标准§4.7[conv.integral])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM