プロシージャー間の最適化を使用してパフォーマンスを向上する

コンパイラーは、ソース行の境界を越えて最適化できる場合、インライン展開などの追加の最適化を実行することができます。インライン展開は、-ipo オプションで有効になります。

-ipo オプションを使用してプログラムを再コンパイルし、プロシージャー間の最適化を有効にします。

icc -std=c99 -qopt-report=2 -qopt-report-phase=vec -D NOALIAS -D ALIGNED -ipo Multiply.c Driver.c -o MatVector

ベクトル化メッセージは Driver.c (行 150) のインライン展開の場所を示していることに注目してください。これは、ipo_out.optrpt で確認できます。

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

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

      ループの開始 Multiply.c(49,9) インライン展開後 Driver.c(150,9)
         リマーク #15300: ループがベクトル化されました。
      ループの終了

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

ループの開始 Driver.c(74,5) インライン展開後 Driver.c(159,5)
   リマーク #15300: ループがベクトル化されました。
ループの終了 

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

ここで、実行ファイルを開始して、実行時間を記録してください。

次へ: 追加の演習