最適化オプション

最適化オプションでは、アプリケーションの速度およびコードサイズ、そして特定のプロセッサに対しての最適化など、さまざまな最適化をどのように行うのかを指定することができます。

最適化に関する詳細は、「コンパイラ最適化の概要」および『インテル® Fortran ユーザーズ・ガイド Vol II: アプリケーションの最適化』の関連するセクションを参照してください。

「浮動小数点オプション」も参照してください。

最適化オプションの説明

-arch keyword  (IA-32 システムのみ)

デフォルト: -arch pn4

コンパイラが命令を生成するアーキテクチャのバージョンを決定します。

以下の -arch オプションがあります。

-assume [no]buffered_io

デフォルト: -assume nobuffered_io (各レコードが書き込まれるたびにバッファはフラッシュされます)

各レコードが書き込まれるたびに、レコードをディスクに書き込む (フラッシュする) か、またはバッファに蓄積するかを指定します。-assume buffered_io を指定した場合、レコードはバッファに蓄積されます。

ディスクデバイスの場合、-assume buffered_io (または同じ働きをする OPEN 文の BUFFERED='YES' 指定子、または FORT_BUFFERED ランタイム環境変数) は、Fortran ランタイム・システムによってレコードがディスクに書き込まれるまで、多くのレコード出力文 (WRITE) によって内部バッファが使用されるように要求します。ファイルが直接アクセスで開かれた場合、I/O バッファリングは無視されます。

通常、バッファリング付きの書き込みを使用すると、より大きなデータブロックがディスクに書き込まれ、書き込み回数が減るため、ディスク I/O の効率が向上します。ただし、バッファリング付きの書き込みを指定した場合、システム障害が起こると、ディスクにまだ書き込まれていないレコードが失われる可能性があります。

FORT_BUFFERED 環境変数を TRUE に設定しない限り、すべての I/O 操作においてデフォルトの BUFFERED='NO' および -assume nobuffered_io が使用され、各 WRITE 文 (またはその他のレコード出力文) ごとに Fortran ランタイム・システムは内部バッファを空にします。

OPEN 文の BUFFERED 指定子は、指定した論理ユニットに適用されます。これに対して、-assume [no]buffered_io オプションおよび FORT_BUFFERED 環境変数は、すべての Fortran ユニットに適用されます。

-auto_ilp32 (Itanium® ベース・システムおよびインテル® エクステンデッド・メモリ 64 テクノロジ (インテル® EM64T) システムのみ)

デフォルト: オフ

コンパイラは、アプリケーションが 32 ビットのアドレス領域を超えない限り、32 ビットのポインタを使用します。

この最適化は、プログラム全体に対するプロシージャ間の解析を必要とするため、このオプションを使用する際、-ipo オプション も使用する必要があります。

32 ビットのアドレス領域 (232) を超えるプログラムにこのオプションを使用した場合、プログラム実行時に予測できない結果を引き起こす原因となる可能性があります。

インテル EM64T システムでは、-auto_ilp32-xP または -axP が指定されていない限り効果はありません。

-ax{K|W|N|B|P} (IA-32 およびインテル EM64T システムのみ)

デフォルト: なし

指定したインテル® プロセッサに対して、機能性が向上する関数を別個に生成可能な箇所を検出するように、コンパイラに指示します。

固有の関数バージョンを生成できることが判明した場合、コンパイラはそれがパフォーマンスの向上につながるかどうかをチェックします。パフォーマンスの向上につながると判明した場合、コンパイラはプロセッサ固有の関数バージョンと汎用バージョンの両方を生成します。汎用バージョンはすべての IA-32 プロセッサ上で実行できます。

プログラムの実行時に、使用されているインテル・プロセッサに応じて、この 2 つのバージョンのどちらを実行するかが選択されます。この方法により、プログラムは従来の IA-32 プロセッサとの互換性を保ちながら、最新のインテル・プロセッサ上でパフォーマンスを大幅に向上することができます。

以下に、指定可能な値および最適化されるプロセッサを示します。

インテル EM64T システムでは、-axW および -axP オプションのみ有効です。

-complex_limited_range[-]

デフォルト: オフ (-complex_limited_range-)

複素数のデータ型を使用するいくつかの算術演算で、基本代数展開の使用を有効にします。このオプションを使用すると、複素数算術を多く使用するプログラムにおいてパフォーマンスが向上する場合があります。ただし、指数範囲の極値が正しく計算されない可能性があります。

-f[no-]alias

デフォルト: -falias

プログラム内のエイリアシングを仮定するよう指定します。

-f[no-]fnalias も参照してください。

-f[no-]fnalias

デフォルト: -ffnalias

関数内のエイリアシングを仮定するよう指定します。-fno-fnalias オプションを指定した場合、関数内のエイリアシングを仮定しませんが、複数の呼び出しにわたるエイリアシングは仮定します。

-f[no-]alias も参照してください。

-fast

デフォルト: オフ

ランタイム・パフォーマンスにおけるいくつかの最適化を有効にするショートカット・メソッドを提供します。

Itanium ベース・システムでは、-fast オプションを設定すると、パフォーマンスを向上する以下のオプションが設定されます。

IA-32 およびインテル EM64T システムでは、-fast オプションは -xP も設定します。したがって、-fast オプションを設定すると、-O3 -ipo -static -xP が設定されます。 IA-32 およびインテル EM64T システムで -xP を使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。

利用可能な最高のパフォーマンスを得るには、場合によっては、-xN などのアーキテクチャ固有のオプションを併用する必要があります。

-fast によって設定されたオプションを上書きするには、コマンドラインから -fast オプションの後に使用するオプションを指定してください。

-fast オプションによって設定されたいくつかのオプションは、バージョンによって変更される場合があります。

-fnsplit[-] (Itanium ベース・システムのみ)

デフォルト: -prof_use が指定されている場合はオン、それ以外の場合はオフ。

-prof_use も有効な場合、関数分割を有効にします。 (このオプションは、-prof_use が有効でない場合、効果はありません)

-prof_use を使用する場合、このオプションは自動的に有効になります。

関数分割を無効にするには、-fnsplit- を使用してください (ただし、関数のグループ化は無効になりません)。

次の Vol II のトピックも参照してください。
基本的な PGO オプション
プロファイルに基づく最適化の例

-fp (IA-32 およびインテル EM64T システムのみ)

デフォルト: オン

ebp の汎用レジスタとしての使用を無効にします。

ただし、ほとんどのデバッガは、スタック・フレーム・ポインタとして ebp を使用するため、必要な操作をしない限りスタック・バックトレースを生成できません。このオプションは、フレームポインタを許可し、最適化における ebp レジスタの使用を無効にします。また、デバッガはスタック・バックトレースを生成します。

-gp

デフォルト: オフ

代替構文: -p

gprof ツールを使用して関数のプロファイリングができるようにコンパイルおよびリンクを行います。

-ip

デフォルト: オフ

単一ファイルのプロシージャ間の最適化を有効にします。

関数のインライン展開を実行します。

Vol II: 「-ip と -Qoption 指定子の併用」も参照してください。

-ip_no_inlining

デフォルト: オフ

-ip-ipo を指定してプロシージャ間の最適化が行われるときに、プロシージャ間のインライン化については無効にします。しかし、他のプロシージャ間の最適化には何の影響も与えません。-ip または -ipo が必要です。

-ip_no_pinlining  

デフォルト: オフ

部分的なインライン展開を無効にします。-ip または -ipo[n] が必要です。

-ipo[n]

デフォルト: オフ

マルチファイル IPO を有効にします。このオプションを指定すると、別々のファイル内で定義している関数内での呼び出し命令について関数のインライン展開が実行されます。

オプションで、コンパイラが生成するオブジェクト・ファイルの数 n の値を (0 以上の整数で) 指定できます。

n が 0 の場合、オブジェクト・ファイルの予想サイズに基づいて、生成するオブジェクト・ファイルの数をコンパイラが決定します。小規模なアプリケーションでは 1 つのオブジェクト・ファイルを、大規模なアプリケーションでは複数のオブジェクト・ファイルを生成します。

n のデフォルト値は 1 (1 つのオブジェクト・ファイルを生成) です。

関連情報

次の Vol II のトピックも参照してください。
IPO のコンパイル・モデル
xilink を使用したマルチファイル IPO 実行ファイルの作成
-ip と -Qoption 指定子の併用

-ipo_c

デフォルト: オフ

複数のファイルにわたる最適化を行い、マルチファイル・オブジェクト・ファイルを作成します。最後のリンク段階の前に停止して、最適化されたオブジェクト・ファイルを残します。

Vol II: 「IPO 中間出力のキャプチャ」も参照してください。

-ipo_obj

デフォルト: オフ

実際のオブジェクト・ファイルを強制的に生成します。 ipo[n] が必要です。 -ipo_obj -ipo2 を指定すると、ipo_obj.o および ipo_obj1.o が作成されます。Vol II: 「実際のオブジェクト・ファイルの生成」も参照してください。

-ipo_S

デフォルト: オフ

複数のファイルにわたる最適化を行い、マルチファイル・アセンブリ・ファイルを作成します。-ipo[n] と同じ最適化を実行しますが、最後のリンク段階の前に停止し、最適化されたアセンブリ・ファイルを残します。デフォルトのリスト名は、ipo_out.s です。

Vol II: 「IPO 中間出力のキャプチャ」も参照してください。

-ipo_separate

デフォルト: オフ

ソースファイルごとに 1 つのオブジェクト・ファイルを作成します。このオプションは、-ipo[n] で設定されたすべての値よりも優先されます。 

-ivdep_parallel (Itanium ベース・システムのみ)

デフォルト: オフ

IVDEP ディレクティブが指定されたループにループ・キャリー・メモリ依存がないことを示します。この手法は、スパース・マトリックス・アプリケーションに役立ちます。

Vol II: 「IVDEP ディレクティブのメモリの依存性」も参照してください。

-nolib_inline

デフォルト: オン

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

-On

デフォルト: -debug を指定しない限り -O2。指定した場合、デフォルトは -O0

アプリケーションの種類におけるコードの最適化を指定します。設定可能な値は以下のとおりです。

IA-32 システムでは、-O1-O2、および -O オプションは同じ働きをします。

Itanium ベース・システムでは、-O2 および -O オプションは同じ働きをします。

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

-opt_report

デフォルト: オフ

最適化レポートを生成して、stderr に送ります。

Vol II: 「最適化機構レポートの作成」も参照してください。

-opt_report_file file

デフォルト: オフ

最適化レポートを生成し、レポートのファイル名を指定します。このオプションを使用した場合、-opt_report を指定する必要はありません。

Vol II: 「最適化機構レポートの作成」も参照してください。

-opt_report_help

デフォルト: オフ

レポートで利用可能な最適化フェーズを表示します。

Vol II: 「最適化機構レポートの作成」も参照してください。

-opt_report_level {min|med|max}

デフォルト: -opt_report_level min

最適化レポートの詳細レベルを指定します。

Vol II: 「最適化機構レポートの作成」も参照してください。

-opt_report_phase phase

デフォルト: オフ

レポートを生成する最適化フェーズを指定します。複数の最適化に対して、コマンドライン上で複数回指定することができます。

Vol II: 「最適化機構レポートの作成」も参照してください。

-opt_report_routine [routine]

デフォルト: オフ

名前の一部に部分文字列 (routine) を含むすべてのルーチンからレポートを生成します。

この routine が指定されていない場合、すべてのルーチンからのレポートが作成されます。

Vol II: 「最適化機構レポートの作成」も参照してください。

-par_threshold[n]

デフォルト: -par_threshold100

並列実行が効果的である可能性に基づいてループの自動並列化のしきい値を設定します。n には、0 から100 までの値を設定することができます。

n=0: ループは、計算量に関わらず自動並列化を行います。 つまり、常に並列化します。

n=100: ループは並列化実行が有効であることが確実な場合にのみ自動並列化されます。

次の Vol II のトピックも参照してください。

自動並列化のしきい値と診断
自動並列化の概要
自動並列化: 有効、オプション、ディレクティブ、および環境変数

-parallel

デフォルト: オフ

自動パラレライザを有効にして、並列で安全に実行できるループのマルチスレッド・コードを生成します。このオプションを使用するには、-O2 または -O3 も指定する必要があります。

次の Vol II のトピックも参照してください。
自動並列化の概要
自動並列化: 有効、オプション、ディレクティブ、および環境変数

-prefetch[-] (IA-32 システムのみ)

デフォルト: -prefetch (on)

プリフェッチ挿入による最適化を有効にします。プリフェッチを挿入する目的は、データをキャッシュにロードするタイミングのヒントをプロセッサに知らせてキャッシュ・ミスを減らすことです。このオプションを使用する場合、-O3 が指定されている必要があります。

プリフェッチ挿入による最適化を無効にするには、-prefetch- を使用してください。

-prof_dir dir

デフォルト: 当該プログラムのコンパイル先ディレクトリになります。

プロファイル出力ファイル (.dyn and .dpi) を保存するディレクトリを指定します。既存のディレクトリを指定してください。

次の Vol II のトピックも参照してください。
高度な PGO オプション
IA-32 アーキテクチャのコーディング・ガイドライン

-prof_file file

デフォルト: 拡張子が .dyn および .dpi のソースファイル名

サマリ・ファイルのプロファイリングに使うファイル名を指定します。

次の Vol II のトピックも参照してください。
高度な PGO オプション
IA-32 アーキテクチャのコーディング・ガイドライン

-prof_gen

デフォルト: オフ

各基本ブロックの実行カウントを取得するために、プロファイル用プログラムをインストルメントします。

次の Vol II のトピックも参照してください。
基本的な PGO オプション
プロファイルに基づく最適化の例

-prof_use

デフォルト: オフ

最適化中にプロファイリング情報 (関数分割および関数のグループ化を含む) が使えるようにします。プロファイルによって最適化された実行ファイルを生成し、利用可能なプロファイル出力ファイルをいくつかマージして pgopti.dpi ファイルを 1 つ作成するようにコンパイラに命令するオプションです。

このオプションを使用した場合、-fnsplit[-] オプションは自動的に有効にされます。

このオプションを使用して有効にされた関数のグループ化はオフにできません。

次の Vol II のトピックも参照してください。
基本的な PGO オプション
プロファイルに基づく最適化の例

-scalar_rep[-] (IA-32 システムのみ)

デフォルト: -scalar_rep (on)

ループ変換中に実行されるスカラ置換を有効にします。-O3 が必要です。

-tppn

IA-32 およびインテル EM64T システムのデフォルト値: -tpp7

Itanium ベース・システムのデフォルト値: -tpp2

特定のインテル・プロセッサ向けに最適化します。 最適化されたアプリケーションは、その他のプロセッサでも実行することができますが、最適化は以下で示されているプロセッサ向けに行われます。以下に、n に指定可能な値を示します。

インテル EM64T システムでは、-tpp7 オプションのみ利用可能です。

-unroll[n]

デフォルト: -unroll (コンパイラによる判断)

1 回のループを最大何回までアンロールするかを指定します。

設定可能な値は以下のとおりです。

-x{K|W|N|B|P} (IA-32 およびインテル EM64T システムのみ)

デフォルト: なし

プログラムを特定のインテル・プロセッサ上で動作するようにします。生成されるコードには、他のプロセッサでサポートされない機能の無条件の使用が含まれることがあります。

以下に、指定可能な値および最適化されるプロセッサを示します。

インテル EM64T システムでは、-xW および -xP オプションのみ有効です。

インテル以外から提供されている x86 プロセッサ上でプログラムを実行する場合、このオプションを指定しないでください。

警告

このオプションを使用してコンパイルされたプログラムを、指定された命令セットをサポートしていないプロセッサ上で実行すると、不正命令例外か、他の予期しない動作が発生する場合があります。特に、-xN-xB、または -xP オプションでコンパイルされたプログラムは、サポートされていないプロセッサ上ではランタイム・エラーが発生します。