1
ダイナミックな命令スケジューリングのようなCPU設計の進歩により、スプラットコンパイラによって生成されたコードとコンパイラの最適化によるパフォーマンスのギャップが狭くなりました。スプラットコンパイラで生成されたコードの相対的なパフォーマンス
ダイナミックな命令スケジューリングのようなCPU設計の進歩により、スプラットコンパイラによって生成されたコードとコンパイラの最適化によるパフォーマンスのギャップが狭くなりました。スプラットコンパイラで生成されたコードの相対的なパフォーマンス
逆に、最適化コンパイラは現代のCPUをより多く獲得します。自動ベクトル化はコードを数倍高速化します。最新の命令セットでは、いくつかの最適化の機会も与えられます(たとえば、x86の条件分岐の代わりにCMOVを使用するなど)。
パフォーマンスのギャップが狭まっている領域があります。 CPUは関数呼び出しを高速に実行するので、関数インライン展開は以前のように有益ではない可能性があります。ループをアンロールすると、コードが少し遅くなることがあります。しかし、ほとんどの場合、コンパイラの最適化とCPUの最適化はお互いに直交しています。 CPUはループフュージョンまたは共通部分式の削除を行うことはできません。コンパイラは、動的命令スケジューリング、分岐予測、またはデータプリフェッチに代わる良い方法を提供することはできません。