プロファイルに基づく最適化 (PGO) を行うと、アプリケーションのどの領域が最も頻繁に実行するかがコンパイラに伝えられます。コンパイラはこの領域を知ると、より慎重かつ明確にアプリケーションの最適化を行います。例えば、PGO を使用するとコンパイラは関数のインライン化について的確な判断が下せる場合が多くなり、その結果、プロシージャ間の最適化の効率が向上します。
プロファイルに基づく最適化では、ソースコードおよびコンパイラからの特別なコードからインストルメント済みプログラムを作成します。インストルメント済みコードを実行するたびにインストルメント済みプログラムは動的情報ファイルを生成します。もう一度コンパイルすると、生成した動的情報がマージされて 1 個のサマリファイルができます。このプロファイル情報を使用して、コンパイラはプログラム内で最も頻繁に使用するパスの実行の最適化を図ります。
サイズや速度に注目する他の最適化と異なり、IPO および PGO の結果はばらつきます。その理由は、プログラムが違えばプロファイルも異なり、最適化の見込みがあるかどうかもさまざまだからです。このガイドラインは、IPO および PGO を使用することにより利点が得られるどうかを判断するのに役立ちます。最適化の原理を理解し、ソースコードの独自な特性を知っておく必要があります。
このバージョンの インテル® Fortran コンパイラでは、PGO は、次のように性能向上を行っています。
レジスタの割り当てには、プロファイル情報を使用して、スピルコードの場所を最適化します。
間接関数呼び出しでは、最も可能性の高い対象を識別することにより、分岐予測が向上されます。Pentium® 4 プロセッサおよびインテル® Xeon™ プロセッサの長いパイプラインでは、分岐の予測の向上により、高いパフォーマンス・ゲインを得られます。
コンパイラは、実行の繰返し回数が少ないループを検出しベクトル化せず、ベクトル化により追加される可能性のあるランタイム・オーバーヘッドを減少させます。