這兩個代碼片段之間會有明顯的速度差異嗎?天真地說,我認爲第二個片段會更快,因爲分支指令遇到的次數要少得多,但另一方面,分支預測器應該解決這個問題。還是會有可觀的開銷,儘管可預測的模式?假定不使用條件移動指令。循環中分支預測的性能
片段1:
for (int i = 0; i < 100; i++) {
if (a == 3)
output[i] = 1;
else
output[i] = 0;
}
片段2:
if (a == 3) {
for (int i = 0; i < 100; i++)
output[i] = 1;
} else {
for (int i = 0; i < 100; i++)
output[i] = 0;
}
我不打算優化這些情況我自己,但我想知道更多有關的開銷甚至以可預測的模式分支。
如果你的編譯器執行的循環外,它們是相同的。 – Fanael
順便說一句,'std :: fill'。 – Fanael
配置文件並查看。 – juanchopanza