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

ベクトル化レポートは、コード中のベクトル化されたループおよびされなかったループとその理由を示します。ベクトル化レポートを生成するには、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 オプションを指定してプロジェクトをコンパイルしてください。

icc -std=c99 -O2 -D NOFUNCCALL -qopt-report=1 -qopt-report-phase=vec Multiply.c Driver.c -o MatVector

注: -D NOFUNCCALL で Matvec 関数の呼び出しをインライン展開された同等のコードに置き換えます。

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

ループの開始 Driver.c(140,5)
   リマーク #25460: ループの最適化はレポートされていません。

   ループの開始 Driver.c(143,9)
      リマーク #25460: ループの最適化はレポートされていません。

      ループの開始 Driver.c(145,13)
         リマーク #15300: ループがベクトル化されました。
      ループの終了

      ループの開始 Driver.c(145,13)
      <ベクトル化の剰余ループ>
      ループの終了
   ループの終了
ループの終了

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

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

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

icc -std=c99 -O2 -D NOFUNCCALL -qopt-report-phase=vec,loop -qopt-report=2 Multiply.c Driver.c -o MatVector

ベクトル化レポート Multiply.optrpt は、Multiply.c の行番号 37 のループが、ループの入れ子の最内ループではないためにベクトル化しなかったことを示しています。行番号 49 の最内ループの 2 つのバージョンが生成され、1 つのバージョンはベクトル化されました。

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

   ループの開始 Multiply.c(49,9)
   <ベクトル化のピールループ、マルチバージョン v1>
   ループの終了

   ループの開始 Multiply.c(49,9)
   <マルチバージョン v1>
      リマーク #25228: データの依存関係のループをマルチバージョンにしました。
      リマーク #15300: ループがベクトル化されました。
   ループの終了

   ループの開始 Multiply.c(49,9)
   <代替アライメントでベクトル化されたループ、マルチバージョン v1>
   ループの終了

   ループの開始 Multiply.c(49,9)
   <ベクトル化の剰余ループ、マルチバージョン v1>
   ループの終了

   ループの開始 Multiply.c(49,9)
   <マルチバージョン v2>
   リマーク #15304: ループはベクトル化されませんでした: マルチバージョンのベクトル化できないループ・インスタンスです。
   リマーク #25439: 剰余ありアンロール - 2
   ループの終了

   ループの開始 Multiply.c(49,9)
   <剰余、マルチバージョン v2>
   ループの終了
ループの終了

次へ: ポインター一義化によりパフォーマンスを向上する