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