[英]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.