最適化オプションのまとめ

ここでは、コードサイズ、局所性、およびコードの速度に影響を与えるコンパイラー・オプションについて説明します。次の表は、最も一般的なコード最適化オプションをまとめたものです。

Windows*

Linux*

説明

/O3

-O3

コードの速度におけるさらに強力な最適化を有効にします。計算を実行する、または大きなデータセットを処理するループを含むコードに推奨します。

/O2

-O2 (または -O)

コードの速度に影響を与えます。これはデフォルトオプションです。何も指定しない場合、コンパイラーはこの最適化レベルを使用します。

/O1

-O1

コードサイズと局所性に影響を与えます。特定の最適化を無効にします。

/fast

-fast

ランタイムのパフォーマンス用の一般的かつ推奨される最適化オプション一式を有効にします。

/Od

-O0

最適化を無効にします。デバッグやコンパイルをすばやく行うには、このオプションを使用します。

次の各セクションでは、一般的な最適化について簡単に説明します

最適化レベルの設定

次の表は、関連するコード最適化オプションの一覧です。また、IA-32、インテル(R) EM64T、Itanium(R) アーキテクチャーで共通の特性、および各アーキテクチャーにおける一般的な動作についても説明します。

これらのコード最適化は、アーキテクチャーおよびコンパイラー・オプションに応じて有効または無効になります。詳細は、関連するコンパイラー・オプションのトピックで説明されています。各オプションの説明には、これらのコンパイラー・オプションのトピックへのリンクが含まれています。

Windows

Linux

効果

/O1

-O1

好ましいコードサイズとコードの局所性に最適化します。この最適化レベルは、分岐が多く、実行時間がループ内のコードに支配されない、非常に大きなコードサイズのアプリケーションのパフォーマンスを向上させます。一般に、この最適化レベルは次のことを行います。

  • グローバルな最適化を有効にします。

  • 組み込み関数の認識と組み込み関数のインライン展開を無効にします。

  • Itanium ベース・システムでは、ソフトウェアのパイプライン化、ループのアンロール、およびグローバル・コード・スケジューリングを無効にします。

ほとんどの場合は、このオプションよりも -O2 (Linux) または /O2 (Windows) を推奨します。

このオプションによって設定されるオプション、またはアーキテクチャー別およびオペレーティング・システム別の動作に関する詳細は、次のトピックを参照してください。

  • -O1 コンパイラー・オプション

/O2

-O2, -O

速度について最適化します。デフォルトの最適化レベルです。最適化レベルを指定しなかった場合、コンパイラーはこのコード最適化レベルを自動的に使用します。一般的に推奨される最適化レベルです。しかし、他のコンパイラー・オプションを指定して、このレベルで通常行われる最適化と同じ最適化を行うこともできます。

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

このオプションの動作は、アーキテクチャーによって異なります。

Itanium ベース・システム:

  • 速度の最適化を有効にします。グローバル・コード・スケジューリング、ソフトウェアのパイプライン化、プレディケーション、スペキュレーション、およびデータ・プリフェッチが含まれます。

このオプションによって設定されるオプション、またはアーキテクチャー別およびオペレーティング・システム別の動作の詳細は、次のトピックを参照してください。

  • -O2 コンパイラー・オプション

/O3

-O3

-O2 (Linux) または /O2 (Windows) の最適化に加えて、プリフェッチ、スカラー置換、キャッシュ・ブロッキング、ループ変換、およびメモリーアクセス変換などのより強力な最適化を有効にします。最大実行速度に最適化を行いますが、ループ変換およびメモリーアクセス変換が行われない限り、パフォーマンスが向上しない場合があります。このオプションによる最適化は、コードによっては -O2 (Linux) または /O2 (Windows) の最適化よりも遅くなります。

このオプションは、浮動小数点演算を多く使用するループや大きなデータセットを処理するループを含むアプリケーションに推奨します。

他のコード最適化オプションと同じように、このオプションの動作はアーキテクチャーおよびオペレーティング・システムによって異なります。

IA-32 システム

  • -ax または -x (Linux)、/Qax または /Qx (Windows) と組み合わせて使用すると、-O2 (Linux)、/O2 (Windows) よりも詳細にデータの依存性を解析します。その結果、コンパイル時間が長くなることがあります。

  • Mac OS* システムでは、-x および -ax オプションで有効な値は P のみです。

Itanium ベース・システム:

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

詳細は、次のトピックを参照してください。

  • -O3 コンパイラー・オプション

/fast

-fast

ランタイム・パフォーマンスを向上させる最適化機能一式をすべて有効にする、単純で単一の最適化を提供します。アーキテクチャーおよびオペレーティング・システムに固有のオプションを設定します。

Itanium ベース・システム:

  • Linux: -ipo-O3、および -static

  • Windows: /O3 および /Qipo

IA-32 システムおよびインテル EM64T 対応システム

  • Linux: -ipo、-O3-no-prec-div-static、および -xP

  • Windows: /O3/Qipo/Qprec-div-、および /QxP

Mac OS*: -xP および -static オプションはサポートされていません。

-xP オプション (Linux) または /QxP オプション (Windows) を使用してコンパイルされたプログラムは、互換性のないプロセッサーを検出し、実行時にエラーメッセージを出力します。

また、IA-32 システムおよびインテル EM64T 対応システムでは、このオプションによって設定される -xP オプション (Linux) または /QxP オプション (Windows) は、他のコマンドライン・オプションで上書きされません。このオプションと -xN (Linux) または /QxN (Windows) などの異なるプロセッサー固有のオプションを指定した場合、コンパイラーは -xP オプションまたは /QxP オプションを上書きすることができないという警告を出力します。この制限に対処するには、設定したいオプションをコマンドラインから明示的に指定してください。

このオプションは他のオプションを有効にしますが、このオプションによって有効にされるオプションが、コンパイラーの次のリリースで変更されることもあります。メイクファイルを使用する場合、この動作の変更に注意するようにしてください。

制約事項と使用に関する詳細は、次のトピックを参照してください。

  • -fast コンパイラー・オプション

最適化の範囲の制限

次の表は、インテル(R) コンパイラーによる最適化を制限するオプションの一覧です。

Windows

Linux

効果

/Od

-O0

すべての最適化を無効にします。コンパイル時間を優先する開発段階では、このオプションを使用してください。

Linux:

  • -fp オプションと -fmath-errno オプションを設定します。

Windows:

  • すべての最適化を無効にして、/Od /Ob1 (最適化処理のすべてを無効にし、インライン化のみを有効にする) のような特定の最適化を指定する場合は、/Od を使用します。

詳細は、次のトピックを参照してください。

  • -O0 コンパイラー・オプション

/Zi、/Z7

-g

デバッガーで使用するため、オブジェクト・ファイルにシンボリック・デバッグ情報を生成します。

このオプションは、アーキテクチャーとオペレーティング・システムに応じて、他のコンパイラー・オプションを有効または無効にします。詳細は、次のトピックを参照してください。

  • -g コンパイラー・オプション

/fltconsistency

-fltconsistency

浮動小数点の一貫性を向上させますが、実行速度が多少遅くなる場合があります。このオプションは、最適化を制限し、宣言された精度を維持します。

詳細は、次のトピックを参照してください。

対応するオプションはありません

-fmath-errno,
-fno-math-errno

数値演算ライブラリー関数の呼び出しの後に、errno がテストされると仮定するようコンパイラーに指示します。

最適化を制限する詳しい方法については、「Qoption 指定子の使用」を参照してください。

診断オプション

Windows

Linux

効果

/Qsox

-sox

コンパイラー・オプションとバージョン番号を実行ファイルに保存するようにコンパイラーに指示します。リンク処理中に、リンカーは情報文字列を実行ファイル内に置きます。このオプションを使用すると、ファイルのサイズは多少増加しますが、リグレッション問題のバージョンの識別が簡単になります。

詳細は、次のトピックを参照してください。

  • -sox コンパイラー・オプション