[英]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
可以很大(但是恒定),并且这是唯一的分支(除了将k
和m
与n
进行比较),我想对其进行优化。
的零和非零在分配a
可以被认为是均匀随机的。
我的第一个方法是
count += a[index] & 1;
但是对于所有奇数, count
只会增加。
另外:我也有一种情况,其中a
包含bool
,但是根据C ++,条件 true
和false
定义为非零和零,这基本上等同于上述问题。
如问题注释中所述if(a[index] != 0) count++;
不会产生分支(在这种情况下),该分支已在程序集中进行了验证。
为了完整起见,与上述语句等效的是count += a[index] != 0;
(根据标准§4.7[conv.integral])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.