ベクトル化レポートを生成する

ベクトル化レポートは、コード中のベクトル化されたループおよびされなかったループとその理由を示します。ベクトル化レポートを生成するには、Qopt-report または Qopt-report-phase:vec コンパイラー・オプションを使用します。

Qopt-report-phase:vec とともに指定すると、Qopt-report:1 オプションはコード中のベクトル化されたループを示すレポートを生成し、Qopt-report:2 オプションはコード中のベクトル化されたループおよびされなかったループとその理由を示すレポートを生成します。

これらのオプションを使用するには、次の操作を行います。

  1. プロジェクトのプロパティー・ページで、[構成プロパティ] > [Fortran] > [Diagnostics (診断)] を選択します。

  2. [Optimization Diagnostic Level (最適化診断レベル)][Level 1 (レベル 1) (/Qopt-report:1)] に設定します。

  3. [Optimization Diagnostics Phase (最適化診断フェーズ)][Vectorization (ベクトル化) (/Qopt-report-phase:vec)] に設定します。

O1 オプションを指定するとベクトル化が無効になるため、コンパイラーはベクトル化レポートを生成しません。ベクトル化レポートを生成するには、O2 オプションを指定してプロジェクトをビルドしてください。

O2 オプションを設定するには、次の操作を行います。

  1. プロジェクトのプロパティー・ページで、[構成プロパティ] > [Fortran] > [Optimization (最適化)] を選択します。

  2. [Optimization (最適化)][Maximize Speed (実行速度)] に設定します。

レポートを表示するため、プリプロセッサー・マクロ NOFUNCCALL を定義して、driver.f90 にある matvec() の呼び出しを同等の Fortran コードに置き換えます。プロジェクトのプロパティー・ページで、[構成プロパティ] > [Fortran] > [Preprocessor (プリプロセッサー)] > [Preprocessor Definitions (プリプロセッサーの定義)] のユーザー定義マクロのリストに NOFUNCCALL を追加します (リストに複数のマクロを含める場合はカンマで区切ってください)。

プロジェクトをリビルドし、実行ファイルを開始します ([デバッグ] > [デバッグなしで開始])。新しい実行時間を記録します。[Compiler Optimization Report (コンパイラーによる最適化レポート)] ウィンドウまたはオブジェクト・ディレクトリーの *.optrpt ファイルに示されるように、短縮された時間は主に、matvec.f90 の行 32 の内部ループの自動ベクトル化によるものです。

例えば、matvec.optrptdriver.optrpt には以下のメッセージが出力されます。

Matvec.f90(32,3): リマーク #15300: ループがベクトル化されました。

行番号および列番号は異なる場合があります。

Qopt-report2 オプションにより生成されるリストには、ベクトル化されなかったループとその理由も含まれます。Qopt-report:1 と同様の操作で、[Optimization Diagnostic Level (最適化診断レベル)] を [Level 2 (レベル 2) (/Qopt-report:2)] に設定して Qopt-report:2 オプションを指定します。

プロジェクトをリビルドします。

ベクトル化レポートは、matvec.f90 の行番号 33 のループは、ループの入れ子の最内ループではないためにベクトル化されなかったことを示しています。

次へ: データのアライメントによりパフォーマンスを向上する