XL Fortran for AIX V8.1.1
ユーザーズ・ガイド
最適化プログラムをデバッグすると、特殊な問題が発生します。最適化は演算の順序を変更し、コードを追加または削除し、作成したコードを元のソース・ステートメントと関連付けるのが難しくなるようなことを行う場合があります。たとえば、最適化プログラムは、変数の保管をすべて除去し、それをレジスターにのみ保持します。ほとんどのデバッガーは、これに従うことができず、その変数が決して更新されないように見えます。
最初にプログラムをデバッグしてから、最適化オプションで再コンパイルし、最適化したプログラムをテストしてからプログラムを製品化することをお勧めします。最適化したコードが期待どおりの結果を作成しない場合は、別のデバッグ・セッションで特定の最適化の問題を分離してください。
|下の表は、最適化されたコードの開発中に役立つ、特化された情報を提供するオプションを示しています。
|
診断オプション
|
オプション
| 動作
|
-qlist
| オブジェクト・リストを出力するようにコンパイラーに指示します。オブジェクト・リストには、生成された命令、トレースバック・テーブル、テキスト定数の 16 進および疑似アセンブリー表記が含まれています。
|
-qreport
| 実行したループ変換と、プログラムが並列化された方法についての報告を作成するようにコンパイラーに指示します。このオプションは、-qhot または -qsmp が指定されると使用可能になります。
|
-qinitauto
| すべての自動変数を指定の値に初期化するコードを出力するように、コンパイラーに指示します。
|
-qextchk
| リンカーが外部変数および関数のファイル間型検査を行うことを可能にする、追加のシンボリック情報を生成します。このオプションは、リンカーに -btypchk オプションがアクティブであることを要求します。
|
-qipa=list
| IPA 最適化の情報を提供するオブジェクト・リストを出力するように、コンパイラーに指示します。
|
最適化されたプログラムが最適化されていないプログラムと異なる結果を発生する理由を以下に示します。
- プログラムに無効なコードが入っていると、最適化コードに障害が発生する場合があります。たとえば、呼び出されたプロシージャーの共通ブロックにもある実引き数をプログラムが渡したり、2 つまたはそれ以上の仮引き数が同じ実引き数と関連付けられていると、障害が発生する場合があります。
- |最適化を行わずに動作したプログラムが、最適化を使用してコンパイルすると失敗する場合は、
|相互参照リストと、初期化前に使用される変数に対するプログラムの実行の流れをチェックしてください。
|-qinitauto=hex_value オプションでコンパイルして、
|一貫して誤った結果を起こしてみてください。
|たとえば、-qinitauto=FF を使用すると、REAL および COMPLEX 変数の初期値は
|"negative not a number" (-NaNQ) になります。
|これらの変数で演算を行っても、結果は NaNQ 値になります。
|他のビット・パターン (hex_value) は異なる結果を生み、何が起きているかに関して
|さらなる手掛かりを提供します。
|(初期化されていない変数を持つプログラム、コンパイラーが行うデフォルトでの解釈のために、最適化をせずに
|コンパイルすると、正しく機能しているかのように見える場合がありますが、最適化を行ってコンパイルすると、
|障害が発生する場合があります。
|同様に、プログラムは最適化を行ったときに正しく実行されているように見えることがありますが、より低レベルの
|最適化において、または異なる環境においては障害が発生する場合があります。)
- ストレージ内の値の検査に依存するデバッグ手法は、十分に注意して使用してください。共通式の評価が、削除または移動されている可能性があります。いくつかの変数がレジスターに割り当てられている場合がありますし、ストレージにはまったくない場合もあります。
- 関連情報:
- -g オプション、
-qinitauto オプション、第 11 章, 問題判別とデバッグを参照してください。
- 関連情報:
-
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]