インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

O

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

構文

Linux* および macOS*:

-O[n]

Windows*:

/O[n]

引数

n

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

デフォルト

O2

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

説明

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

オプション

説明

O (Linux* および macOS*)

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

O0 (Linux* および macOS*)

すべての最適化を無効にします。

このオプションは、ほかのオプションも設定します。設定されるオプションは、使用しているオペレーティング・システムやアーキテクチャーに応じてコンパイラーにより決定され、バージョンによって異なる場合があります。

O1

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

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

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

このオプションは、ほかのオプションも設定します。設定されるオプションは、使用しているオペレーティング・システムやアーキテクチャーに応じてコンパイラーにより決定され、バージョンによって異なる場合があります。

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

O2

速度の最適化を有効にします。一般的に推奨される最適化レベルです。
ベクトル化は O2 以上のレベルで有効になります。

IA-32 アーキテクチャー・ベースのシステム: 分配、プレディケーション、交換、マルチバージョニング、スカラー置換などの一部の基本的なループの最適化が行われます。

このオプションにより以下も有効になります。

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

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

    • インライン展開

    • 定数の伝播

    • 前方代入

    • ルーチン属性の伝播

    • 変数アドレスの解析

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

    • 未参照変数の削除

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

    • 定数の伝播

    • コピーの伝播

    • 不要コードの排除

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

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

    • ループアンロール

    • コード選択の最適化

    • 部分冗長の排除

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

    • 変数名の変更

    • 例外処理の最適化

    • 末尾再帰

    • ピープホールの最適化

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

    • 不要ストアの排除

このオプションは、ほかのオプション、特にコードの速度を最適化するオプションも設定します。設定されるオプションは、使用しているオペレーティング・システムやアーキテクチャーに応じてコンパイラーにより決定され、バージョンによって異なる場合があります。

Linux* システムでは、最適化 (オプション -O2 以上) とデバッグ (オプション -g) を有効にしてコンパイルすると、デフォルトで -debug inline-debug-info オプションが有効になります。

共有ライブラリーの多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。

O3

O2 最適化を行い、融合、アンロールとジャムのブロック、IF 文の折りたたみなど、より強力なループ変換を有効にします。

このオプションは、ほかのオプションも設定します。設定されるオプションは、使用しているオペレーティング・システムやアーキテクチャーに応じてコンパイラーにより決定され、バージョンによって異なる場合があります。

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

O3 の最適化は、ループ変換およびメモリーアクセス変換が行われない限り、パフォーマンスが向上しないことがあります。場合によっては、O2 の最適化よりも遅くなります。

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

共有ライブラリーの多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。

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

IDE オプション

Visual Studio*: [Optimization (最適化)] > [Optimization (最適化)]

Eclipse*: [General (全般)] > [Optimization Level (最適化レベル)]

Xcode*: [General (全般)] > [Optimization Level (最適化レベル)]

代替オプション

O0

Linux* および macOS*: なし
Windows*: /Od

関連情報