この記事に出くわしました:分岐せずに 2 つの整数の最小値または最大値を計算する
それは「[o]n 一部のまれなマシンでは分岐にコストがかかる...」から始まります。
私は以前、分岐はプロセッサに実行パイプラインのクリアと再起動を強制することが多いため、常にコストがかかると考えていました (たとえば、並べ替えられた配列を処理する方が、並べ替えられていない配列よりも速いのはなぜですか? を参照してください)。
これにより、いくつかの質問が残ります。
- 記事を書いた人はその部分を間違えましたか? それとも、分岐が問題になる前にこの記事が書かれたのでしょうか (日付はわかりません)。
(x < y) ? x : y
最新のプロセッサには、パフォーマンスを低下させることなく、 のような最小限の分岐を完了する方法がありますか?- それとも、最新のコンパイラはすべて、このハックを自動的に実装するだけですか? 具体的には、Java は何をするのでしょうか? 特にその
Math.min(...)
機能はその三項ステートメントであるため...