コードが速いのは「運がいい」から?Clangが分岐なしループを生成する条件
Your code is fast – if you're lucky
最適化されたQuicksort実装の開発中に、現代のコンパイラ(特にClang)が適切なプログラミングスタイルを使った場合に限り、分岐なしの高速なループを生成することを発見。ソートネットワークとループアンローリングを使った分岐なしQuicksortの実装を紹介し、macOS/M1で5000万個のdoubleを4.39秒でソート(C++のstd::sortは1.33秒)。さらに、ポインタ操作を簡潔に書く「見た目の変更」が性能に与える影響を検証する。
現代のコンパイラ(特にClang)は、適切なプログラミングスタイルを使えば、分岐なしの高速な命令でループを最適化します。