ここでは、コンパイラー・オプションを変更した後、アプリケーションがどの程度ベクトル化されたかを解析します。
-O2 最適化レベルを有効にしてアプリケーションを再コンパイルしたら、パフォーマンス・スナップショット解析を再度実行してベクトル化の効率を解析します。
解析が完了したら、[Summary] ウィンドウの [Vectorization] セクションをご覧ください。
以下の主なメトリックを観察してください:
Vectorization メトリックは 99.9% であり、コードがベクトル化されていることを示しています。
ただし、128-bit Packed FLOPs メトリックの横に赤いフラグが確認できます。問題の説明を表示するには、赤いフラグのアイコンまたはメトリック値の上にマウスを移動します。
この場合、インテル® VTune™ プロファイラーは、浮動小数点命令の大部分が部分的なベクトルロードで実行されていることを示しています。
解析結果は、AVX2 命令セットをサポートするインテル® プロセッサー・ベースのマシンで実行され、すべての命令が 128 ビットレジスターのみを使用して実行されたという事実により、256 ビット幅の AVX2 レジスターがまったく使用されなかったことを意味します。したがって、インテル® VTune™ プロファイラーは、128 ビット・ベクトル・レジスターの使用率 100.0% を問題としてフラグ付けしています。
実際に使用されているベクトル命令セットを理解するには、HPC Performance Characterization解析を実行します。
解析を実行するには次の操作を行います。
analysis tree から HPC Performance Characterization 解析アイコンをクリックします。
ベクトル化解析には必要ないため、Collect stacks、Analyze Memory bandwidth、Analyze OpenMP regions のオプションを無効にします。
[Start] ボタンをクリックして解析を実行します。
データ収集が完了すると、インテル® VTune™ プロファイラーは HPC パフォーマンス特性解析のデフォルトの [Summary] ウィンドウを開きます。
[Summary] ウィンドウの Vectorization セクションに注目してください。
multiply2 関数のメインループは古い SSE2 命令セットを使用してベクトル化され、コンパイルと解析は AVX2 をサポートするプロセッサーで実行されたことに注意してください。そのため、ハードウェア・リソースの一部は十分に活用されていないままです。
次のステップ: プラットフォームに適したベクトル化を有効にする。