ベクトル化レポートは、コード中のループがベクトル化されたかどうか、またされなかった場合はその理由も示します。
[プロジェクト] > [プロパティ] > [C/C++] > [Command Line (コマンドライン)] > [Additional Options (追加のオプション)] を選択して /Qvec-report1 を追加します。
ベクトル化は /O1 レベルでは無効のため、コンパイラーはベクトル化レポートを生成しません。/O2 (デフォルトの最適化) で再コンパイルしてください。
新しい実行時間を記録します。短縮された時間は主に、ベクトル化レポートで示されているように、行番号 150 の内部ループの自動ベクトル化によるものです。
Driver.c(150) (列 4): リマーク: ループがベクトル化されました。 Driver.c(164) (列 2): リマーク: ループがベクトル化されました。 Driver.c(81) (列 2): リマーク: ループがベクトル化されました。
/Qvec-report2 オプションにより生成されるリストには、ベクトル化されなかったループとその理由も含まれます。
[C/C++] > [Command Line (コマンドライン)] > [Additional Options (追加のオプション)] で /Qvec-report1 を /Qvec-report2 に変更します。
また、[Linker (リンカ)] > [Command Line (コマンドライン)] > [Additional Options (追加のオプション)] で /Qvec-report2 を追加します。
プロジェクトをリビルドします。
ベクトル化レポートは、Multiply.c の行番号 45 のループが、ループの入れ子の最内ループではないためにベクトル化しなかったことを示しています。行番号 55 の 2 つのバージョンの最内ループは生成されましたが、ベクトル化されませんでした。
Multiply.c(45) (列 2): リマーク: ループはベクトル化されませんでした: 内部ループではありません。 Multiply.c(55) (列 3): リマーク: ループはベクトル化されませんでした: ベクトル依存関係が存在しています。 Multiply.c(55) (列 3): リマーク: ループはスキップされました: 複数のバージョンがあります。 Driver.c(140) (列 2): リマーク: ループはベクトル化されませんでした: 内部ループではありません。 Driver.c(140) (列 2): リマーク: ループはベクトル化されませんでした: ベクトル化は可能ですが非効率です。 Driver.c(141) (列 2): リマーク: ループはベクトル化されませんでした: ベクトル化は可能ですが非効率です。 Driver.c(145) (列 2): リマーク: ループはベクトル化されませんでした: 内部ループではありません。 Driver.c(148) (列 3): リマーク: ループはベクトル化されませんでした: 内部ループではありません。 Driver.c(150) (列 4): リマーク: ループがベクトル化されました。 Driver.c(164) (列 2): リマーク: ループがベクトル化されました。 Driver.c(81) (列 2): リマーク: ループがベクトル化されました。 Driver.c(69) (列 2): リマーク: ループはベクトル化されませんでした: ベクトル化は可能ですが非効率です。 Driver.c(54) (列 2): リマーク: ループはベクトル化されませんでした: 内部ループではありません。 Driver.c(55) (列 3): リマーク: ループはベクトル化されませんでした: ベクトル化は可能ですが非効率です。
/Qvec-report コンパイラー・オプションについての詳細は、ユーザー・リファレンス・ガイドの「コンパイラー・オプション」を参照してください。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。