自動最適化

このトピックでは、最も一般的なコードの最適化オプションをリストし、IA-32 アーキテクチャー、インテル® 64 アーキテクチャー、IA-64 アーキテクチャーで共通の特性および各アーキテクチャーの一般的な動作について説明します。

アーキテクチャーの違いと、これらのオプションにより有効または無効になるコンパイラー・オプションもリストします。それぞれのオプションの説明には、関連トピックへのリンクも含まれています。

Linux* および Mac OS* X

Windows*

説明

-O1

/O1

好ましい (より小さな) コードサイズとコードの局所性に最適化します。ほとんどの場合は、このオプションよりも -O2 (Linux および Mac OS X) または /O2 (Windows) を推奨します。

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

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

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

IA-64 アーキテクチャー:

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

-O2 または -O

/O2

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

一般に、コードサイズは -O1 (Linux および Mac OS X) や /O1 (Windows) を使用して生成されたコードサイズよりも大きくなります。

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

IA-32 アーキテクチャーおよびインテル® 64 アーキテクチャー:

  • ベクトル化など速度を最大限にする最適化を有効にします。

IA-64 アーキテクチャー:

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

-O3

/O3

-O2 (Linux および Mac OS X) または /O2 (Windows) の最適化に加えて、プリフェッチ、スカラー置換、キャッシュ・ブロッキング、ループ変換、およびメモリーアクセス変換などのより強力な最適化を有効にします。

-O2 (Linux) や /O2 (Windows) と比較して、このオプションによる最適化は、概ねプログラムの実行速度が向上しますが、コード実行の速度が低下する場合もあります。このオプションは、コンパイルに時間がかかります。

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

-fast

/fast

ランタイム・パフォーマンスを向上させる最適化機能一式をすべて有効にする、単純で単一の最適化を提供します。

この最適化は、多くのプログラムでパフォーマンスの向上が得られる一般的なオプションです。

IA-32 アーキテクチャーおよびインテル® 64 アーキテクチャーでは、このオプションによって設定される -xSSSE3 オプション (Linux および Mac OS X) または /QxSSSE3 オプション (Windows) は、他のコマンドライン・オプションで上書きされません。このオプションと -xSSE2 (Linux) または /QxSSE2 (Windows) などの異なるプロセッサー固有のオプションを指定した場合、コンパイラーは -xSSSE3 オプションまたは /QxSSSE3 オプションを上書きすることができないという警告を出力します。この制限に対処するには、設定したいオプションをコマンドラインから明示的に指定してください。

Caution icon警告

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

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

次の構文例では、デフォルトのオプションを使用してアプリケーションをコンパイルする方法を示します。

オペレーティング・システム

Linux および Mac OS X

icpc -O2 prog.cpp

Windows

icl /O2 prog.cpp

クイック・リファレンス・トピックの一覧は、「クイック・リファレンス・リスト」を参照してください。