これらの 2 つのコード スニペットの間に顕著な速度の違いはありますか? 単純に、2 番目のスニペットの方が分岐命令がはるかに少ないため高速になると思いますが、一方で、分岐予測子はこの問題を解決するはずです。それとも、予測可能なパターンにもかかわらず、顕著なオーバーヘッドが発生しますか? 条件付き移動命令は使用しないものとします。
スニペット 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;
}
これらのケースを自分で最適化するつもりはありませんが、予測可能なパターンであっても分岐のオーバーヘッドについてもっと知りたいです。