-On オプションによる最適化の設定

次の表は、-O0-O1-O2-O3、および -fast オプションの効果を説明したものです。表は最初に IA-32 アーキテクチャと Itanium® アーキテクチャの両方で共通の特性を説明し、次に -On オプションおよび -fast オプションの動作の詳細を (ある場合) アーキテクチャ別に説明します。

オプション

効果

-O0

-On で指定した最適化を無効にします。IA-32 システムではこのオプションを指定すると -fp オプションが設定されます。

-O1

好ましいコードサイズとコードの局所性に最適化します。
ループのアンロールを無効にします。
任意の分岐および実行時間がループ内のコードに支配されない、非常に大きなコードサイズのアプリケーションでパフォーマンスを向上させます。
ほとんどの場合は、-O1 よりも -O2 を推奨します。
IA-32 システム:
コードサイズを減らす組込み関数のインライン化を無効にします。速度の最適化を有効にします。組込み関数の認識と -fp オプションを無効にします。
Itanium ベース・システム:
ソフトウェアのパイプライン化とグローバル・コード・スケジューリングを無効にします。サーバ・アプリケーションの最適化を有効にします (フラットなプロファイルの直列型コードや分岐型コード)。速度の最適化を有効にし、コードサイズも抑えるようにします。例えば、このオプションを使用すると、ソフトウェアのパイプライン化とループのアンロールが無効になります。

-O2, -O

デフォルトの最適化オプションです。ただし、-g が指定されている場合、-O0 がデフォルトになります。
速度について最適化します。
一般的に推奨される最適化レベルです。-g オプションは、コマンドラインで -g とともに -O2 (または -O1 または -O3) が明示的に指定されていなければ、デフォルトの -O2 オプションをオフにして -O0 をデフォルトにします。

IA-32 システムではこのオプションは -O1 オプションと同じ動作をします。

Itanium ベース・システム:
速度の最適化を有効にします。これにはグローバル・コード・スケジューリング、ソフトウェアのパイプライン化、プレディケーション、およびスペキュレーションも含まれます。

これらのシステム上で -O2 オプションを使用すると、組込み関数のインライン展開が有効になります。また、パフォーマンスの向上のために次の機能も有効にします: 定数伝播、コピー伝播、不要コードの排除、グローバル・レジスタ割り当て、グローバル命令スケジューリング、スペキュレーション・コントロール、ループのアンロール、コード選択の最適化、部分冗長の排除、ストレングス・レダクション/誘導変数の簡略化、変数名の変更、例外処理の最適化、末端再帰、ピープホールの最適化、構造体代入の低下および最適化、不要ストアの排除の各機能が使用されます。

-O3

-O2 の最適化を有効にし、それに加えてプリフェッチ、スカラ置換、ループ変換、およびメモリのアクセス変換のような、さらに強力な最適化も有効にします。最大実行速度に最適化を行いますが、ループ変換およびメモリアクセス変換が行われない限り、パフォーマンスが向上しない場合があります。-O3 の最適化はコードによっては -O2 の最適化よりも遅くなります。このオプションは、浮動小数点演算を多く使用するループや大きなデータセットを処理するループを含むアプリケーションに推奨します。
IA-32 システム:
-ax{K|W|N| B|P} または -x{K|W|N|B|P} オプションと組み合わせると、コンパイラは -O2 よりも詳細にデータの依存性を分析します。そのためコンパイル時間が長くなる場合があります。

Itanium ベース・システムでは、技術計算を行うアプリケーション (ループを多用するコード) の最適化、つまりループとデータ・プリフェッチの最適化を有効にします。

-fast

このオプションは、ランタイム・パフォーマンスを向上させる最適化機能一式をすべて有効にする、簡単な方法です。このオプションを指定すると、ランタイム・パフォーマンスの向上につながる次の各オプションが設定されます。

-O3: 最高速で高レベルの最適化 (上記参照)

-ipo: 複数ファイルにわたるプロシージャ間の最適化を有効にします

-static: 共有ライブラリとリンクしないようにします

IA-32 およびインテル® エクステンデッド・メモリ 64 テクノロジ (インテル® EM64T) システムでは、-fast でこれらのオプションと -xP が設定されます

いくつかの重要なコンパイラ最適化機能を一度に設定するよう指示します。-fast によって設定されたオプションを上書きするには、コマンドラインから -fast オプションの後に使用するオプションを指定してください。

-fast で設定されるオプションは、バージョンによって変更になる場合があります。

IA-32 システム:
-ax{K|W|N| B|P} または -x{K|W|N|B|P} オプションと合わせてこのオプションを使用すると、最高のランタイム・パフォーマンスが得られます。