コンパイラーは、ソース行の境界を越えて最適化できる場合、インライン展開などの追加の最適化を実行することができます。インライン展開は、-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: ループがベクトル化されました。 ループの終了
ここで、実行ファイルを開始して、実行時間を記録してください。