分支預測失敗代價高。將 if 判斷融合進算術運算式,可減少分支指令,利用 CPU 流水線優勢。
for (int i = 0; i < 1000*10; i++) {
if (data[i/1000][i%10] >= 0)
sum += data[i/1000][i%10];
}
for (int i = 0; i < 1000*10; i++) {
int val = data[i/1000][i%10];
sum += (val >= 0) * val; // 條件轉為 0/1 乘法
}
int:真為 1,假為 0。(val >= 0) 產生 0 或 1,乘以 val 等價於條件累加。if 分支,指令流更線性,利於超標量執行與向量化。| 情況 | 建議 |
|---|---|
| 條件為真機率極高(如 >95%) | 分支預測極準,原版可能更快 |
| 條件機率接近 50% | 無分支版本顯著優勢 |
| 邏輯極其複雜(多層嵌套條件) | 融合後可讀性下降,不建議 |
| 嚴格依賴短路求值副作用 | 不可融合(如函數調用有副作用) |
條件融合進運算式是減少分支的有效手段,但非銀彈。關鍵在於實測驗證,並在可讀性與性能間取得平衡。