簡體   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