ベクトル化レポートは、コード中のベクトル化されたループおよびされなかったループとその理由を示します。ベクトル化レポートを生成するには、Qopt-report または Qopt-report-phase:vec コンパイラー・オプションを使用します。
Qopt-report-phase:vec とともに指定すると、Qopt-report:1 オプションはコード中のベクトル化されたループを示すレポートを生成し、Qopt-report:2 オプションはコード中のベクトル化されたループおよびされなかったループとその理由を示すレポートを生成します。
これらのオプションを使用するには、次の操作を行います。
プロジェクトのプロパティー・ページで、[構成プロパティ] > [Fortran] > [Diagnostics (診断)] を選択します。
[Optimization Diagnostic Level (最適化診断レベル)] を [Level 1 (レベル 1) (/Qopt-report:1)] に設定します。
[Optimization Diagnostics Phase (最適化診断フェーズ)] を [Vectorization (ベクトル化) (/Qopt-report-phase:vec)] に設定します。
O1 オプションを指定するとベクトル化が無効になるため、コンパイラーはベクトル化レポートを生成しません。ベクトル化レポートを生成するには、O2 オプションを指定してプロジェクトをビルドしてください。
O2 オプションを設定するには、次の操作を行います。
プロジェクトのプロパティー・ページで、[構成プロパティ] > [Fortran] > [Optimization (最適化)] を選択します。
[Optimization (最適化)] を [Maximize Speed (実行速度)] に設定します。
レポートを表示するため、プリプロセッサー・マクロ NOFUNCCALL を定義して、driver.f90 にある matvec() の呼び出しを同等の Fortran コードに置き換えます。プロジェクトのプロパティー・ページで、[構成プロパティ] > [Fortran] > [Preprocessor (プリプロセッサー)] > [Preprocessor Definitions (プリプロセッサーの定義)] のユーザー定義マクロのリストに NOFUNCCALL を追加します (リストに複数のマクロを含める場合はカンマで区切ってください)。
プロジェクトをリビルドし、実行ファイルを開始します ([デバッグ] > [デバッグなしで開始])。新しい実行時間を記録します。[Compiler Optimization Report (コンパイラーによる最適化レポート)] ウィンドウまたはオブジェクト・ディレクトリーの *.optrpt ファイルに示されるように、短縮された時間は主に、matvec.f90 の行 32 の内部ループの自動ベクトル化によるものです。
例えば、matvec.optrpt と driver.optrpt には以下のメッセージが出力されます。
ループの開始 matvec.f90(26,3) matvec.f90(26,3):リマーク: #15300: ループがベクトル化されました。 ループの終了
Qopt-report2 オプションにより生成されるリストには、ベクトル化されなかったループとその理由も含まれます。Qopt-report:1 と同様の操作で、[Optimization Diagnostic Level (最適化診断レベル)] を [Level 2 (レベル 2) (/Qopt-report:2)] に設定して Qopt-report:2 オプションを指定します。
プロジェクトをリビルドします。
ベクトル化レポートは、matvec.f90 の行番号 33 のループは、ループの入れ子の最内ループではないためにベクトル化されなかったことを示しています。
行番号および列番号は異なる場合があります。
Qopt-report および Qopt-report-phase コンパイラー・オプションの詳細については、『デベロッパー・ガイドおよびリファレンス』の「コンパイラー・オプション」を参照してください。