XL Fortran for AIX V8.1.1
ユーザーズ・ガイド
最適化を行うと、コンパイル時間は長くなりますが、通常は、実行時間は短くなります。 XL Fortran を使用すれば、最適化をコンパイル時に実行したいかどうかを選択することができます。
|デフォルトでは、コンパイラーは最適化を実行しません (-qnoopt)。
|コンパイラーの最適化を使用可能にするには、-O コンパイラー・オプションと、レベルを示す数字を指定してください。
|下の表は、それぞれの最適化レベルにおけるコンパイラーの動作を要約したものです。
|
最適化レベル
|
オプション
| 動作
|
-qnoopt/-O0
| コンパイルは高速、コードはデバッグ可能、プログラム・セマンティクスは保持される。
|
-O2 (-O と同じ)
| 包括的な低レベルの最適化。部分的デバッグがサポートされる。
|
-O3
| より広範囲な最適化。一部の精度がトレードオフされる。
|
-O4 および -O5
| プロシージャー間の最適化。ループ最適化。自動マシン・チューニング。
|
|最適化レベル -O2 (-O と同じ) では、コンパイラーは
|包括的な低レベル最適化を実行します。
|これには以下の技法が含まれます。
|
- |ユーザー変数のレジスターへのグローバル割り当て。
|グラフ・カラーリング・レジスター割り振りと呼ばれます。
- |アドレッシング・モードの強度削減と効果的な使用。
- |冗長命令の除去。
|共通副次式の除去と呼ばれます。
- |結果が使用されない命令、または指定された制御フローによって到達できない命令の除去。
|デッド・コード除去と呼ばれます。
- |値の番号付け (代数的単純化)。
- |インバリアント・コードのループからの移動。
- |定数式のコンパイル時間評価。
|定数伝搬とも呼ばれます。
- |制御フロー単純化。
- |ターゲット・マシンの命令スケジューリング (再配列)。
- |ループのアンロールとソフトウェアのパイプライン化。
|
|最適化レベル -O2 での
|最小デバッグ情報 は、以下の動作から構成されます。
|
- |外部およびパラメーター・レジスターはプロシージャー境界で可視になります。
|これはプロシージャーの出入り口です。
|プロシージャーの入り口にブレークポイントを設定した場合に、これを見ることができます。
|ただし、-Q でインライン化された関数は、このような境界とその可視性を除去する場合があります。
|また、これは|コンパイラーが非常に小さい関数をインライン化したときにも行われることがあります。
- |SNAPSHOT ディレクティブは、レジスターをメモリーにフラッシュすることで、ストレージ可視性のための
|追加プログラム・ポイントを作成します。
|これにより、ローカルまたはグローバル変数の値、あるいはプログラム内のパラメーターの値を表示および変更することが
|可能になります。
|SNAPSHOT の位置にブレークポイントを設定し、その特定ストレージ領域をデバッガーで参照することができます。
- |-qkeepparm オプションは、パラメーターがスタック・トレースで可視になるように、パラメーターを入力時に
|強制的にプロシージャーに記憶させます。
|
|最適化レベル -O3 では、コンパイラーは -O2 よりもさらに
|幅広い最適化を実行します。
|最適化は、次のようにして拡大され掘り下げられます。
|
- |より深い内部ループのアンロール。
- |ループ・スケジューリングの改善。
- |最適化スコープの拡大 (一般にプロシージャー全体に)。
- |最適化の特化 (すべてのプログラムに効果があるとは限らないもの)。
- |多くのコンパイル時間またはスペースを必要とする最適化。
- |暗黙のメモリー使用制限の除去 (-qmaxmem=-1 指定のコンパイルと同様)。
- |-qnostrict の暗黙指定。
|これにより、浮動小数点計算と潜在的な例外が一部再配列されます。
|
|-qnostrict の暗黙設定により、以下のような精度のトレードオフがコンパイラーによって
|行われます。
|
- |浮動小数点計算の再配列。
- |潜在的な例外 (ゼロ除算、オーバーフローなど) の再配列または除去。
|
|-O3 最適化は以下を行います。
|
- |コンパイル中により多くのマシンのリソースを要求します。
- |コンパイルにより長い時間をかけます。
- |プログラムのセマンティクスを多少変更します。
|
|実行時パフォーマンスが非常に重要な要因であり、マシン・リソースが余分なコンパイル時の動作に適応できる
|場合は、-O3 オプションを使用してください。
|実行される正確な最適化は、次のような多数の要因によって決まります。
|
- |プログラムを再配置できるかどうか、そして、依然として正しく実行できるかどうか
- |個々の最適化の相対的な利点
- |マシン・アーキテクチャー
|
|最適化レベル -O2 と -O3 を使用するための推奨アプローチは以下のとおりです。
|
最適化レベル -O4 と -O5 は、自動的に他のいくつかの最適化オプションを活動化します。最適化レベル -O4 には以下が含まれます。
- -O3 のすべて
- -qhot
- -qipa
- -qarch=auto
- -qtune=auto
- -qcache=auto
最適化レベル -O5 には以下が含まれます。
-O5 をコンパイル・ステップで指定する場合は、リンク・ステップでも指定する必要があります。
-qipa オプションは厳密に言って最適化レベルではありませんが、これは最適化をすべてのプロシージャーに拡張します (プロシージャーが別のファイルにある場合も)。また、このオプションは他の最適化オプション、特に -O (任意のレベルで) および -Q によって行われた最適化の効率を高めます。また、本質的にコンパイルの時間を長くする可能性があるので、すでにデバッグしてあって、使用する準備ができているアプリケーションを調整する場合などに使用できます。
- 関連情報:
-
|
|
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]