ベクトル化レポートは、コード中のベクトル化されたループおよびされなかったループとその理由を示します。ベクトル化レポートを生成するには、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 オプションを指定するとベクトル化が無効になるため、コンパイラーはベクトル化レポートを生成しません。ベクトル化レポートを生成するには、O2、qopt-report-phase=vec、および qopt-report=1 オプションを指定してプロジェクトをコンパイルしてください。
ifort -real-size 64 -O2 -qopt-report=1 -qopt-report-phase=vec matvec.f90 driver.f90 -o MatVector
注: -D NOFUNCCALL で Matvec 関数の呼び出しをインライン展開された同等のコードに置き換えます。
プログラムを再コンパイルし、MatVector を実行します。新しい実行時間を記録します。短縮された時間は主に、ベクトル化レポート Driver.optrpt で示されているように、行番号 32 の内部ループの自動ベクトル化によるものです。
最適化レポート開始: matvec_ レポート: ベクトルの最適化 [vec] ループの開始 matvec.f90(32,3) ループの開始 matvec.f90(32,3) リマーク #15300: ループがベクトル化されました。 ループの終了 ループの開始 matvec.f90(32,3) <剰余> ループの終了 ループの終了 ループの開始 matvec.f90(33,3) ループの開始 matvec.f90(38,6) <ピーリング> ループの終了 ループの開始 matvec.f90(38,6) リマーク #15300: ループがベクトル化されました。 ループの終了 ループの開始 matvec.f90(38,6) ループの終了 ループの開始 matvec.f90(38,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(33,3) リマーク #15541: ループはベクトル化されませんでした: 内部ループがすでにベクトル化されています。 ループの開始 matvec.f90(38,6) <ピーリング> ループの終了 ループの開始 matvec.f90(38,6) リマーク #15399: ベクトル化のサポート: アンロールファクターが 4 に設定されます。 リマーク #15300: ループがベクトル化されました。 ループの終了 ループの開始 matvec.f90(38,6) ループの終了 ループの開始 matvec.f90(38,6) <ベクトル化の剰余ループ> ループの終了 ループの終了
行番号および列番号は異なる場合があります。
qopt-report および qopt-report-phase コンパイラー・オプションの詳細については、『インテル® Fortran コンパイラー・デベロッパー・ガイドおよびリファレンス』の「コンパイラー・オプション」を参照してください。