コンパイラーは、ソース行の境界を越えて最適化できる場合、インライン展開などの追加の最適化を実行することができます。インライン展開は、/Qipo オプションで有効になります。
/Qipo オプションを使用してプログラムをリビルドし、プロシージャー間の最適化を有効にします。
[Optimization [Intel C++] (最適化 [インテル® C++])] > [Interprocedural Optimization (プロシージャー間の最適化)] > [Multi-file (マルチファイル) (/Qipo)] を選択します。
ベクトル化レポートは ipo_out.optrpt に出力されます。
ループの開始 Driver.c(152,9) Driver.c(152,9): リマーク #15542: ループはベクトル化されませんでした: 内部ループがすでにベクトル化されています。 ループの開始 Multiply.c(37,5) インライン展開後 Driver.c(150,9) Multiply.c(37,5): リマーク #15542: ループはベクトル化されませんでした: 内部ループがすでにベクトル化されています。 ループの開始 Multiply.c(49,9) インライン展開後 Driver.c(150,9) Multiply.c(50,13): リマーク #15388: ベクトル化のサポート: 参照 a[0][i][j] にアラインされたアクセスが含まれています。 Driver.c(150,9): リマーク #15388: ベクトル化のサポート: 参照 x[j] にアラインされたアクセスが含まれています。 Multiply.c(49,9): リマーク #15305: ベクトル化のサポート: ベクトル長 2 Multiply.c(49,9): リマーク #15399: ベクトル化のサポート: アンロールファクターが 4 に設定されます。 Multiply.c(49,9): リマーク #15309: ベクトル化のサポート: 正規化されたベクトル化のオーバーヘッド 0.594 Multiply.c(49,9): リマーク #15300: ループがベクトル化されました Multiply.c(49,9): リマーク #15448: マスクなしアライン・ユニット・ストライド・ロード: 2 Multiply.c(49,9): リマーク #15475: --- ベクトルのコストサマリー開始 --- Multiply.c(49,9): リマーク #15476: スカラーコスト: 9 Multiply.c(49,9): リマーク #15477: ベクトルコスト: 4.000 Multiply.c(49,9): リマーク #15478: スピードアップの期待値: 2.000 Multiply.c(49,9): リマーク #15488: --- ベクトルのコストサマリー終了 --- LOOP END ループの開始 Multiply.c(49,9) インライン展開後 Driver.c(150,9) ベクトル化の剰余ループ Multiply.c(50,13): リマーク #15388: ベクトル化のサポート: 参照 a[0][i][j] にアラインされたアクセスが含まれています。 Driver.c(150,9): リマーク #15388: ベクトル化のサポート: 参照 x[j] にアラインされたアクセスが含まれています。 Multiply.c(49,9): リマーク #15335: 剰余ループはベクトル化されませんでした: ベクトル化は可能ですが非効率です。オーバーライドするには vector always ディレクティブまたは -vec-threshold0 を使用してください。 Multiply.c(49,9): リマーク #15305: ベクトル化のサポート: vector length 2 Multiply.c(49,9): リマーク #15309: ベクトル化のサポート: 正規化されたベクトル化のオーバーヘッド 2.417 ループの終了 ループの終了 ループの終了
ここで、実行ファイルを開始して、実行時間を記録してください。