次のコードは、たとえば Intel Core i7 で分岐予測ミスのペナルティを被りますか?
for(i = 0, count = *ptr; i < count; i++) {
// do something
}
count は 0、1、または 2 です。
次のコードは、たとえば Intel Core i7 で分岐予測ミスのペナルティを被りますか?
for(i = 0, count = *ptr; i < count; i++) {
// do something
}
count は 0、1、または 2 です。
count がランダムに変化する場合、ループ状態は予測できません。特定のパターン (0、1、2、1 の繰り返し) で動作する場合、core2 または i7 で完全に予測できます。他のパターンの場合は異なります。
詳細な説明については、Intel、AMD、および VIA CPU のマイクロアーキテクチャ: アセンブリ プログラマおよびコンパイラ メーカー向けの最適化ガイドの「分岐予測」の章を参照してください。