最適化オプションでは、アプリケーションの速度およびコードサイズ、そして特定のプロセッサに対しての最適化など、さまざまな最適化をどのように行うのかを指定することができます。
最適化に関する詳細は、「コンパイラ最適化の概要」および『インテル® Fortran ユーザーズ・ガイド Vol II: アプリケーションの最適化』の関連するセクションを参照してください。
「浮動小数点オプション」も参照してください。
デフォルト: -arch pn4
コンパイラが命令を生成するアーキテクチャのバージョンを決定します。
以下の -arch オプションがあります。
-arch pn1
インテル® Pentium® プロセッサ向けに最適化します。
-arch pn2
インテル Pentium Pro プロセッサ、インテル Pentium II プロセッサ、およびインテル Pentium III プロセッサ向けに最適化します。
-arch pn3
インテル Pentium Pro プロセッサ、インテル Pentium II プロセッサ、およびインテル Pentium III プロセッサ向けに最適化します。-arch:pn2 オプションと同じです。
-arch pn4
インテル Pentium 4 プロセッサ向けに最適化します。
-arch SSE
ストリーミング SIMD 拡張命令 (SSE) をサポートするインテル Pentium 4 プロセッサ向けに最適化します。
-arch SSE2
ストリーミング SIMD 拡張命令 2 (SSE2) をサポートするインテル Pentium 4 プロセッサ向けに最適化します。
デフォルト: -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 ユニットに適用されます。
デフォルト: オフ
コンパイラは、アプリケーションが 32 ビットのアドレス領域を超えない限り、32 ビットのポインタを使用します。
この最適化は、プログラム全体に対するプロシージャ間の解析を必要とするため、このオプションを使用する際、-ipo オプション も使用する必要があります。
32 ビットのアドレス領域 (232) を超えるプログラムにこのオプションを使用した場合、プログラム実行時に予測できない結果を引き起こす原因となる可能性があります。
インテル EM64T システムでは、-auto_ilp32 は -xP または -axP が指定されていない限り効果はありません。
デフォルト: なし
指定したインテル® プロセッサに対して、機能性が向上する関数を別個に生成可能な箇所を検出するように、コンパイラに指示します。
固有の関数バージョンを生成できることが判明した場合、コンパイラはそれがパフォーマンスの向上につながるかどうかをチェックします。パフォーマンスの向上につながると判明した場合、コンパイラはプロセッサ固有の関数バージョンと汎用バージョンの両方を生成します。汎用バージョンはすべての IA-32 プロセッサ上で実行できます。
プログラムの実行時に、使用されているインテル・プロセッサに応じて、この 2 つのバージョンのどちらを実行するかが選択されます。この方法により、プログラムは従来の IA-32 プロセッサとの互換性を保ちながら、最新のインテル・プロセッサ上でパフォーマンスを大幅に向上することができます。
以下に、指定可能な値および最適化されるプロセッサを示します。
-axK インテル Pentium III プロセッサおよび互換性のあるインテル・プロセッサ
-axW インテル Pentium 4 プロセッサおよび互換性のあるインテル・プロセッサ
-axN インテル Pentium 4 プロセッサおよび互換性のあるインテル・プロセッサ メイン・プログラムがこのオプションを使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。このオプションは、インテル・プロセッサ固有の最適化に加えて、新しい最適化も有効にします。
-axB インテル Pentium M プロセッサおよび互換性のあるインテル・プロセッサ メイン・プログラムがこのオプションを使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。このオプションは、インテル・プロセッサ固有の最適化に加えて、新しい最適化も有効にします。
-axP ストリーミング SIMD 拡張命令 3 (SSE3) をサポートするインテル Pentium 4 プロセッサ メイン・プログラムがこのオプションを使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。このオプションは、インテル・プロセッサ固有の最適化に加えて、新しい最適化も有効にします。
インテル EM64T システムでは、-axW および -axP オプションのみ有効です。
デフォルト: オフ (-complex_limited_range-)
複素数のデータ型を使用するいくつかの算術演算で、基本代数展開の使用を有効にします。このオプションを使用すると、複素数算術を多く使用するプログラムにおいてパフォーマンスが向上する場合があります。ただし、指数範囲の極値が正しく計算されない可能性があります。
デフォルト: -falias
プログラム内のエイリアシングを仮定するよう指定します。
-f[no-]fnalias も参照してください。
デフォルト: -ffnalias
関数内のエイリアシングを仮定するよう指定します。-fno-fnalias オプションを指定した場合、関数内のエイリアシングを仮定しませんが、複数の呼び出しにわたるエイリアシングは仮定します。
-f[no-]alias も参照してください。
デフォルト: オフ
ランタイム・パフォーマンスにおけるいくつかの最適化を有効にするショートカット・メソッドを提供します。
Itanium ベース・システムでは、-fast オプションを設定すると、パフォーマンスを向上する以下のオプションが設定されます。
IA-32 およびインテル EM64T システムでは、-fast オプションは -xP も設定します。したがって、-fast オプションを設定すると、-O3 -ipo -static -xP が設定されます。 IA-32 およびインテル EM64T システムで -xP を使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。
利用可能な最高のパフォーマンスを得るには、場合によっては、-xN などのアーキテクチャ固有のオプションを併用する必要があります。
-fast によって設定されたオプションを上書きするには、コマンドラインから -fast オプションの後に使用するオプションを指定してください。
注
-fast オプションによって設定されたいくつかのオプションは、バージョンによって変更される場合があります。
デフォルト: -prof_use が指定されている場合はオン、それ以外の場合はオフ。
-prof_use も有効な場合、関数分割を有効にします。 (このオプションは、-prof_use が有効でない場合、効果はありません)
-prof_use を使用する場合、このオプションは自動的に有効になります。
関数分割を無効にするには、-fnsplit- を使用してください (ただし、関数のグループ化は無効になりません)。
次の Vol II のトピックも参照してください。
基本的な PGO オプション
プロファイルに基づく最適化の例
デフォルト: オン
ebp の汎用レジスタとしての使用を無効にします。
ただし、ほとんどのデバッガは、スタック・フレーム・ポインタとして ebp を使用するため、必要な操作をしない限りスタック・バックトレースを生成できません。このオプションは、フレームポインタを許可し、最適化における ebp レジスタの使用を無効にします。また、デバッガはスタック・バックトレースを生成します。
デフォルト: オフ
代替構文: -p
gprof ツールを使用して関数のプロファイリングができるようにコンパイルおよびリンクを行います。
デフォルト: オフ
単一ファイルのプロシージャ間の最適化を有効にします。
関数のインライン展開を実行します。
Vol II: 「-ip と -Qoption 指定子の併用」も参照してください。
デフォルト: オフ
-ip か -ipo を指定してプロシージャ間の最適化が行われるときに、プロシージャ間のインライン化については無効にします。しかし、他のプロシージャ間の最適化には何の影響も与えません。-ip または -ipo が必要です。
デフォルト: オフ
部分的なインライン展開を無効にします。-ip または -ipo[n] が必要です。
デフォルト: オフ
マルチファイル IPO を有効にします。このオプションを指定すると、別々のファイル内で定義している関数内での呼び出し命令について関数のインライン展開が実行されます。
オプションで、コンパイラが生成するオブジェクト・ファイルの数 n の値を (0 以上の整数で) 指定できます。
n が 0 の場合、オブジェクト・ファイルの予想サイズに基づいて、生成するオブジェクト・ファイルの数をコンパイラが決定します。小規模なアプリケーションでは 1 つのオブジェクト・ファイルを、大規模なアプリケーションでは複数のオブジェクト・ファイルを生成します。
n のデフォルト値は 1 (1 つのオブジェクト・ファイルを生成) です。
関連情報
次の Vol II のトピックも参照してください。
IPO のコンパイル・モデル
xilink を使用したマルチファイル IPO 実行ファイルの作成
-ip と -Qoption 指定子の併用
デフォルト: オフ
複数のファイルにわたる最適化を行い、マルチファイル・オブジェクト・ファイルを作成します。最後のリンク段階の前に停止して、最適化されたオブジェクト・ファイルを残します。
Vol II: 「IPO 中間出力のキャプチャ」も参照してください。
デフォルト: オフ
実際のオブジェクト・ファイルを強制的に生成します。 ipo[n] が必要です。 -ipo_obj -ipo2 を指定すると、ipo_obj.o および ipo_obj1.o が作成されます。Vol II: 「実際のオブジェクト・ファイルの生成」も参照してください。
デフォルト: オフ
複数のファイルにわたる最適化を行い、マルチファイル・アセンブリ・ファイルを作成します。-ipo[n] と同じ最適化を実行しますが、最後のリンク段階の前に停止し、最適化されたアセンブリ・ファイルを残します。デフォルトのリスト名は、ipo_out.s です。
Vol II: 「IPO 中間出力のキャプチャ」も参照してください。
デフォルト: オフ
ソースファイルごとに 1 つのオブジェクト・ファイルを作成します。このオプションは、-ipo[n] で設定されたすべての値よりも優先されます。
デフォルト: オフ
IVDEP ディレクティブが指定されたループにループ・キャリー・メモリ依存がないことを示します。この手法は、スパース・マトリックス・アプリケーションに役立ちます。
Vol II: 「IVDEP ディレクティブのメモリの依存性」も参照してください。
デフォルト: オン
組込み関数のインライン展開を無効にします。
デフォルト: -debug を指定しない限り -O2。指定した場合、デフォルトは -O0。
アプリケーションの種類におけるコードの最適化を指定します。設定可能な値は以下のとおりです。
-O0
すべての最適化を無効にします。
-debug を (キーワードなしで) 指定した場合のデフォルト設定です。
このオプションを指定すると、一部の -warn オプションは無視されます。
-O1
IA-32 システムでの代替構文: -O2 または -O
処理速度を最適化します。コードのサイズが増えるだけでそれほど速度が向上しない最適化は無効にします このオプションでは、グローバルな最適化を実行できます。これにはデータフローの解析、コードの移動、ストレングス・レダクションとテストの置換、スプリット・ライフタイムの解析、および命令スケジューリングが含まれます。-O2 オプションには、-O1 で実行される最適化も含まれています。
IA-32 システムでは、-O1 および -O2 オプションは同じ働きをします。
-O2
Itanium ベース・システムでの代替構文: -O
コードサイズおよび処理速度を最適化しますが、コードサイズを大きくするだけでさほどの高速化にはつながらない最適化は無効にします。Itanium ベースのコンパイラの -O1 オプションは、コードサイズを小さくするために、ソフトウェアのパイプライン化をオフにします。このオプションは、ソース・プログラム・ユニットにおけるローカルな最適化、共通部分式の認識、およびシフトを使用した整数の乗算と除算の展開を有効にします。
-O3
処理速度の最適化およびより高度なレベルでの最適化を行います。この最適化オプションには、ループ変換、ソフトウェア・パイプライン処理、およびプリフェッチ (IA-32 のみ) が含まれています。一部のプログラムでは、このオプションを使用してもパフォーマンスが向上しない場合があります。-O3 オプションには、-O2 で実行される最適化も含まれています。このオプションは、処理速度を向上するグローバルな最適化を有効にします (そのため、コードサイズは増加します)。これらの最適化には、次のものが含まれています。
o 命令スケジューリングを含むループのアンロール
o コードを反復して、分岐を排除
o 次元が 2 のべき乗となる配列のサイズをパディングして、キャッシュの使用効率を向上 (Vol II: 「配列の効率的な使用」も参照してください。)
-O3 を設定すると、-fp も設定されます。
IA-32 システムでは、-O1、-O2、および -O オプションは同じ働きをします。
Itanium ベース・システムでは、-O2 および -O オプションは同じ働きをします。
注
コマンドラインの最後に指定された -On オプションは、その前に指定された他のオプションより優先されます。
デフォルト: オフ
最適化レポートを生成して、stderr に送ります。
Vol II: 「最適化機構レポートの作成」も参照してください。
デフォルト: オフ
最適化レポートを生成し、レポートのファイル名を指定します。このオプションを使用した場合、-opt_report を指定する必要はありません。
Vol II: 「最適化機構レポートの作成」も参照してください。
デフォルト: オフ
レポートで利用可能な最適化フェーズを表示します。
Vol II: 「最適化機構レポートの作成」も参照してください。
デフォルト: -opt_report_level min
最適化レポートの詳細レベルを指定します。
Vol II: 「最適化機構レポートの作成」も参照してください。
デフォルト: オフ
レポートを生成する最適化フェーズを指定します。複数の最適化に対して、コマンドライン上で複数回指定することができます。
Vol II: 「最適化機構レポートの作成」も参照してください。
デフォルト: オフ
名前の一部に部分文字列 (routine) を含むすべてのルーチンからレポートを生成します。
この routine が指定されていない場合、すべてのルーチンからのレポートが作成されます。
Vol II: 「最適化機構レポートの作成」も参照してください。
デフォルト: -par_threshold100
並列実行が効果的である可能性に基づいてループの自動並列化のしきい値を設定します。n には、0 から100 までの値を設定することができます。
n=0: ループは、計算量に関わらず自動並列化を行います。 つまり、常に並列化します。
n=100: ループは並列化実行が有効であることが確実な場合にのみ自動並列化されます。
次の Vol II のトピックも参照してください。
自動並列化のしきい値と診断
自動並列化の概要
自動並列化: 有効、オプション、ディレクティブ、および環境変数
デフォルト: オフ
自動パラレライザを有効にして、並列で安全に実行できるループのマルチスレッド・コードを生成します。このオプションを使用するには、-O2 または -O3 も指定する必要があります。
次の Vol II のトピックも参照してください。
自動並列化の概要
自動並列化: 有効、オプション、ディレクティブ、および環境変数
デフォルト: -prefetch (on)
プリフェッチ挿入による最適化を有効にします。プリフェッチを挿入する目的は、データをキャッシュにロードするタイミングのヒントをプロセッサに知らせてキャッシュ・ミスを減らすことです。このオプションを使用する場合、-O3 が指定されている必要があります。
プリフェッチ挿入による最適化を無効にするには、-prefetch- を使用してください。
デフォルト: 当該プログラムのコンパイル先ディレクトリになります。
プロファイル出力ファイル (.dyn and .dpi) を保存するディレクトリを指定します。既存のディレクトリを指定してください。
次の Vol II のトピックも参照してください。
高度な PGO オプション
IA-32 アーキテクチャのコーディング・ガイドライン
デフォルト: 拡張子が .dyn および .dpi のソースファイル名
サマリ・ファイルのプロファイリングに使うファイル名を指定します。
次の Vol II のトピックも参照してください。
高度な PGO オプション
IA-32 アーキテクチャのコーディング・ガイドライン
デフォルト: オフ
各基本ブロックの実行カウントを取得するために、プロファイル用プログラムをインストルメントします。
次の Vol II のトピックも参照してください。
基本的な PGO オプション
プロファイルに基づく最適化の例
デフォルト: オフ
最適化中にプロファイリング情報 (関数分割および関数のグループ化を含む) が使えるようにします。プロファイルによって最適化された実行ファイルを生成し、利用可能なプロファイル出力ファイルをいくつかマージして pgopti.dpi ファイルを 1 つ作成するようにコンパイラに命令するオプションです。
このオプションを使用した場合、-fnsplit[-] オプションは自動的に有効にされます。
このオプションを使用して有効にされた関数のグループ化はオフにできません。
次の Vol II のトピックも参照してください。
基本的な PGO オプション
プロファイルに基づく最適化の例
デフォルト: -scalar_rep (on)
ループ変換中に実行されるスカラ置換を有効にします。-O3 が必要です。
IA-32 およびインテル EM64T システムのデフォルト値: -tpp7
Itanium ベース・システムのデフォルト値: -tpp2
特定のインテル・プロセッサ向けに最適化します。 最適化されたアプリケーションは、その他のプロセッサでも実行することができますが、最適化は以下で示されているプロセッサ向けに行われます。以下に、n に指定可能な値を示します。
1 Itanium プロセッサ向けに最適化します (Itanium ベース・システムのみ)
2 Itanium 2 プロセッサ向けに最適化します (Itanium ベース・システムのみ)
5 インテル® Pentium® プロセッサおよび MMX® テクノロジ対応 Pentium プロセッサ向けに最適化します (IA-32 システムのみ)
6 インテル Pentium Pro プロセッサ、Pentium II プロセッサ、および Pentium III プロセッサ向けに最適化します (IA-32 システムのみ)
7 インテル Pentium 4 プロセッサ、インテル® Xeon™ プロセッサ、インテル Pentium M プロセッサ、およびハイパー・スレッディング (HT) テクノロジ インテル Pentium 4 プロセッサ (SSE3 対応) 向けに最適化します (IA-32 システムのみ)
インテル EM64T システムでは、-tpp7 オプションのみ利用可能です。
デフォルト: -unroll (コンパイラによる判断)
1 回のループを最大何回までアンロールするかを指定します。
設定可能な値は以下のとおりです。
-unroll アンロールを実行するかどうかをコンパイラが判断します。
-unroll0 ループのアンロールを無効にします。(注: Itanium ベース・システムでは、この値のみを使用することができます。その他の値は無視されます。)
-unrolln ループのアンロール回数の上限 n を指定します。
デフォルト: なし
プログラムを特定のインテル・プロセッサ上で動作するようにします。生成されるコードには、他のプロセッサでサポートされない機能の無条件の使用が含まれることがあります。
以下に、指定可能な値および最適化されるプロセッサを示します。
-xK インテル Pentium III プロセッサおよび互換性のあるインテル・プロセッサ
-xW インテル Pentium 4 プロセッサおよび互換性のあるインテル・プロセッサ
-xN インテル Pentium 4 プロセッサおよび互換性のあるインテル・プロセッサ メイン・プログラムがこのオプションを使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。このオプションは、インテル・プロセッサ固有の最適化に加えて、新しい最適化も有効にします。
-xB インテル Pentium M プロセッサおよび互換性のあるインテル・プロセッサ メイン・プログラムがこのオプションを使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。このオプションは、インテル・プロセッサ固有の最適化に加えて、新しい最適化も有効にします。
-xP ストリーミング SIMD 拡張命令 3 (SSE3) をサポートするインテル Pentium 4 プロセッサ メイン・プログラムがこのオプションを使用してコンパイルされると、プログラムは互換性のないプロセッサを検出して、実行時にエラー・メッセージを出力します。このオプションは、インテル・プロセッサ固有の最適化に加えて、新しい最適化も有効にします。
インテル EM64T システムでは、-xW および -xP オプションのみ有効です。
インテル以外から提供されている x86 プロセッサ上でプログラムを実行する場合、このオプションを指定しないでください。
警告
このオプションを使用してコンパイルされたプログラムを、指定された命令セットをサポートしていないプロセッサ上で実行すると、不正命令例外か、他の予期しない動作が発生する場合があります。特に、-xN、-xB、または -xP オプションでコンパイルされたプログラムは、サポートされていないプロセッサ上ではランタイム・エラーが発生します。