O

 

アプリケーションのコードの最適化を指定します。

IDE オプション

Windows: [General (全般)] > [Optimization (最適化)] (/Od/O1/O2/O3/fast)

[Optimization (最適化)] > [Optimization (最適化)] (/Od/O1/O2/O3/fast)

Linux: なし

Mac OS X: [General (全般)] > [Optimization Level (最適化レベル)] (-O)

アーキテクチャー

IA-32、インテル® 64、IA-64 アーキテクチャー

構文

Linux および Mac OS X:

-O[n]

Windows:

/O[n]

引数

n

最適化レベル。設定可能な値は、1、2、または 3 です。Linux および Mac OS X システムでは、0 も指定できます。

デフォルト

O2

速度について最適化します。このデフォルトは、指定されているコンパイラーに応じて変更されます。詳細は、下記を参照してください。

説明

このオプションは、アプリケーションのコードの最適化を指定します。

オプション

説明

O (Linux および Mac OS X)

O2 を指定した場合と同じです。

O0 (Linux および Mac OS X)

すべての最適化を無効にします。IA-32 およびインテル® 64 アーキテクチャー・ベースのシステムでは、このオプションは -fno-omit-frame-pointer オプションおよび -fmath-errno オプションを設定します。

このオプションを指定すると、一部の warn オプションは無視されます。これは、-debug (keyword なし) を指定した場合のデフォルトです。

O1

速度の最適化を有効にし、コードサイズを大きくするだけで高速化に影響を与えるような一部の最適化を無効にします。
コードのサイズを制限するために、このオプションは次のことを行います。

  • グローバルな最適化を有効にします。データフローの解析、コードの移動、ストレングス・レダクションとテストの置換、スプリット・ライフタイムの解析、および命令スケジューリングが含まれます。

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

IA-64 アーキテクチャー・ベースのシステムでは、このオプションは、サーバー・アプリケーションの最適化も有効にします (フラット・プロファイルの直列型コードおよび分岐型コード)。O1 オプションは、次のオプションを設定します。

  • Linux および Mac OS X システム:
    -funroll-loops0-nofltconsistency (-mno-ieee-fp と同じ)、-fomit-frame-pointer-ftz

  • IA-32 アーキテクチャー・ベースの Windows システム:
    /Qunroll0/nofltconsistency (/Op- と同じ)、/Oy/Os/Ob2/Qftz

  • インテル® 64 および IA-64 アーキテクチャー・ベースの Windows システム:
    /Qunroll0/nofltconsistency (/Op- と同じ)、/Os/Ob2/Qftz

O1 オプションは、分岐が多く、実行時間がループ内のコードに支配されない、非常に大きなコードサイズのアプリケーションでパフォーマンスを向上させます。

O2

速度の最適化を有効にします。一般的に推奨される最適化レベルです。
ベクトル化は O2 以上のレベルで有効になります。
IA-64 アーキテクチャー・ベースのシステムでは、このオプションは、グローバル・コード・スケジューリング、ソフトウェアのパイプライン化、プレディケーション、およびスペキュレーションを含む速度の最適化を有効にします。
このオプションは、次の機能も有効にします。

  • 組み込み関数のインライン展開

  • 次の項目を含む、イントラファイルのプロシージャー間の最適化:

    • インライン展開

    • 定数の伝播

    • 前方代入

    • ルーチン属性の伝播

    • 変数アドレスの解析

    • 不要なスタティック関数の排除

    • 未参照変数の削除

  • パフォーマンスの向上のための機能:

    • 定数の伝播

    • コピーの伝播

    • 不要コードの排除

    • グローバルレジスター割り当て

    • グローバル命令スケジューリングおよびスペキュレーション・コントロール

    • ループアンロール

    • コード選択の最適化

    • 部分冗長の排除

    • ストレングス・レダクション/誘導変数の簡略化

    • 変数名の変更

    • 例外処理の最適化

    • 末端再帰

    • ピープホールの最適化

    • 構造体代入の低下および最適化

    • 不要ストアの排除

Windows システムでは、このオプションは Ox オプションと同じです。

O2 オプションは、次のオプションを設定します。

  • IA-32 アーキテクチャー・ベースの Windows システム:
    /Og/Ot/Oy/Ob2/Gs/Qftz

  • インテル® 64 アーキテクチャー・ベースの Windows システム:
    /Og/Ot/Ob2/Gs/Qftz

Linux および Mac OS X システムで -g を指定する場合、コマンドラインで -g とともに O2 (または O1 または O3) が明示的に指定されていなければ、デフォルトの O2 オプションをオフにして O0 をデフォルトにします。

このオプションは、コードの速度を最適化するほかのオプションも設定します。設定されるオプションは、使用しているアーキテクチャーとオペレーティング・システムに基づいて、コンパイラーによって決定されます。

O3

O2 の最適化に加えて、プリフェッチ、スカラー置換、ループ変換、およびメモリーアクセス変換などのより強力な最適化を有効にします。次のような、速度を最大限にする最適化を有効にします。

  • 命令スケジューリングを含むループアンロール

  • コードを反復して、分岐を排除

  • 次元が 2 のべき乗となる配列のサイズをパディングして、キャッシュの使用効率を向上

Windows システムでは、O3 オプションは /Ob2 オプションを設定します。

Linux および Mac OS X システムでは、O3 オプションは -fomit-frame-pointer オプションを設定します。

IA-32 またはインテル® 64 アーキテクチャー・ベースのシステムでは、O3 オプションを -ax または -x (Linux)、/Qax または /Qx (Windows) オプションと組み合わせて使用すると、O2 よりも詳細にデータの依存性を分析します。そのため、コンパイル時間が長くなる場合があります。
IA-64 アーキテクチャー・ベースのシステムでは、O3 オプションは技術計算を行うアプリケーション (ループを多用するコード) の最適化、つまりループとデータ・プリフェッチの最適化を有効にします。

O3 の最適化は、ループ変換およびメモリーアクセス変換が行われない限り、パフォーマンスが向上しないことがあります。場合によっては、O2 の最適化よりも遅くなります。
O3 オプションは、浮動小数点演算を多用するループや大きなデータセットを処理するループを含むアプリケーションに推奨します。

コマンドラインで最後に指定した O オプションは、その前に指定した他のオプションよりも優先されます。

Note icon

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

代替オプション

O1

Linux および Mac OS X: なし
Windows: /Od/optimize:0/nooptimize

O2

Linux および Mac OS X: なし
Windows: /optimize:1/optimize:2

O3

Linux および Mac OS X: なし
Windows: /Ox/optimize:3/optimize:4

O4

Linux および Mac OS X: なし
Windows: /optimize:5

関連情報

関連情報