IPO レポートはインライン展開された関数についての情報を提供し、問題のあるループの特定に役立ちます。また、コンパイラーがソースコードに適用した IPO の場所と方法を特定するのにも役立ちます。
次の例では、最小限の出力で IPO レポートを実行するコマンドを示します。
オペレーティング・システム |
構文例 |
---|---|
Linux* および Mac OS* X |
ifort -opt-report 1 -opt-report-phase=ipo a.f90 b.f90 |
Windows* |
ifort /Qopt-report:1 /Qopt-report-phase:ipo a.f90 b.f90 |
-opt-report (Linux および Mac OS X) または /Qopt-report (Windows) は、レポート・ジェネレーターを起動し、-opt-report-phase=ipo (Linux および Mac OS X) または /Qopt-report-phase:ipo (Windows) は、レポートを生成するフェーズ (ipo) を示します。
-opt-report-file (Linux および Mac OS X) または /Qopt-report-file (Windows) を使用して、レポート結果をキャプチャーする出力ファイルを指定します。結果をキャプチャーするファイルを指定することで、結果の解析に費やす時間を短縮でき、後に行うテスティングの基本ラインをつかむことができます。
IPO レポートの詳細情報には、プログラム全体の解析とインライン展開の 2 つのセクションがあります。デフォルトでは、中レベルの詳細が含まれるレポートが生成されます。レポート結果をキャプチャーする出力ファイルは指定することができます。詳細レベルを最大にして IPO レポートを実行すると、非常に広範囲で専門的な内容がレポート結果に出力されます。結果をキャプチャーするファイルを指定することで、解析時間を短くすることができます。次のサンプルレポートは、一般的なレイアウトを示しています。
サンプル IPO レポート |
---|
<;-1:-1;IPO;;0> プログラム全体 (SAFE) [いずれかのメソッド]: TRUE プログラム全体 (SEEN) [テーブルメソッド]: TRUE プログラム全体 (READ) [オブジェクト・リーダー・メソッド]: TRUE インライン展開オプション値: -inline-factor: 100 -inline-min-size: 20 -inline-max-size: 230 -inline-max-total-size: 2000 -inline-max-per-routine: disabled -inline-max-per-compile: disabled <ipo_sample_main.f90;29:37;IPO インライン展開;MAIN__;0> インライン展開レポート: (MAIN__) [1/4=25.0%] -> for_write_seq_lis(EXTERN) -> インライン展開: mysum_(5) (isz = 23) (sz = 30 (13+17)) ... <ipo_sample_init.f90;32:40;IPO 定数伝播;init_;0> 定数伝播: VARS(1) ... |
次の表は、一般的なレポート要素と結果の解釈に役立つ説明をまとめたものです。
レポート要素 |
説明 |
---|---|
プログラム全体 (SAFE) [いずれかのメソッド]: |
TRUE または FALSE。
プログラム全体の解析モデルについての詳細は、「プロシージャー間の最適化の概要」を参照してください。 |
プログラム全体 (SEEN) [テーブルメソッド]: |
TRUE または FALSE。
|
プログラム全体 (READ) [オブジェクト・リーダー・メソッド]: |
TRUE または FALSE。
|
インライン展開オプション値: |
次のデベロッパーが指示するインライン展開オプションで使用されるコンパイル値を示します。
1 つまはた複数のオプションを指定すると、レポートでは指定された値がリストされます。オプションと値を指定しない場合は、コンパイラーはリストされたオプションのデフォルト値を使用し、レポートにはデフォルト値が表示されます。 値は、各オプションの「コンパイラー・オプション」にリストされている同じ中間言語ユニットを示します。これらのオプションの使用については、「デベロッパーが指示するユーザー関数のインライン展開」を参照してください。 |
インライン展開レポート: |
次の形式で示されます。 (<name>) [<current number>/<total number>=<percent complete>] 各アイテムの意味は次のとおりです。
|
インライン展開: |
関数がインライン展開されると、関数行にプリフィックス "-> インライン展開: _" が付きます。 オプションレポートには、関数名が表示されます。 レポートでは、次の一般的な構文形式が使用されます。 -> インライン展開: _<name>(#) (isz) (sz) 各アイテムの意味は次のとおりです。
|
デッド・スタティック関数排除: |
レポートされた関数が不要なスタティック関数であることを示します。これらの関数のコードを作成する必要はありません。この動作により、全体のコードサイズを抑えることができます。 |