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

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

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

O1 オプションを指定するとベクトル化が無効になるため、コンパイラーはベクトル化レポートを生成しません。ベクトル化レポートを生成するには、O2qopt-report-phase=vec、および qopt-report=1 オプションを指定してプロジェクトをコンパイルしてください。

ifort -real-size 64 -O2 -qopt-report=1 -qopt-report-phase=vec matvec.f90 driver.f90 -o MatVector

プログラムを再コンパイルし、MatVector を実行します。新しい実行時間を記録します。短縮された時間は主に、ベクトル化レポート matvec.optrpt で示されているように、行番号 32 の内部ループの自動ベクトル化によるものです。

最適化レポート開始: matvec_

    レポート: ベクトルの最適化 [vec]


ループの開始 matvec.f90(26,3)
   リマーク #25460: ループの最適化はレポートされていません。

   ループの開始 matvec.f90(26,3)
      リマーク #15300: ループがベクトル化されました。
   ループの終了

   ループの開始 matvec.f90(26,3)
   <ベクトル化の剰余ループ>
  ループの終了
ループの終了

ループの開始 matvec.f90(27,3)
   リマーク #25460: ループの最適化はレポートされていません。

   ループの開始 matvec.f90(32,6)
   <ベクトル化のピールループ>
   ループの終了

   ループの開始 matvec.f90(32,6)
      リマーク #15300: ループがベクトル化されました。
   ループの終了

   ループの開始 matvec.f90(32,6)
   <別の境界でアライメントされたベクトルループ>
   ループの終了

   ループの開始 matvec.f90(32,6)
      <ベクトル化の剰余ループ>
   ループの終了
ループの終了

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

qopt-report-phase=vec,loop とともに qopt-report=2 を指定すると、生成されるリストにベクトル化されなかったまたはマルチバージョンが生成されなかったループとその理由も含まれます。

qopt-report-phase=vec,loop とともに qopt-report=2 オプションを指定してプロジェクトを再コンパイルします。

ifort -real-size 64 -O2 -qopt-report-phase=vec -qopt-report=2 matvec.f90 driver.f90 -o MatVector

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

ループの開始 matvec.f90(27,3)
   リマーク #15542: ループはベクトル化されませんでした: 内部ループがすでにベクトル化されています。

   ループの開始 matvec.f90(32,6)
   <ベクトル化のピールループ>
  ループの終了

   ループの開始 matvec.f90(32,6)
      リマーク #15300: ループがベクトル化されました。
   ループの終了

   ループの開始 matvec.f90(32,6)
   <別の境界でアライメントされたベクトルループ>
   ループの終了

   ループの開始 matvec.f90(32,6)
   <ベクトル化の剰余ループ>
      リマーク #15335: 剰余ループはベクトル化されませんでした: ベクトル化は可能ですが非効率です。
                      オーバーライドするには vector always ディレクティブまたは -vec-threshold0 を使用してください。
   ループの終了
ループの終了