アプリケーションがどの程度効率良くベクトル化されているか把握することは、システムで最高のパフォーマンスを達成するために非常に重要です。この記事では、インテル® Advisor を使用して、ベクトル化の問題をピンポイントで特定し、ハードウェアの使用効率を把握し、パフォーマンスを最適化します。インテル® Advisor は、無料のスタンドアロン版 (英語) またはインテル® Parallel Studio XE およびインテル® System Studio のコンポーネントとして利用できます。
インテル® Advisor を使用して次の情報を得ることができます。
- ベクトル化されたループ
- データ型、ベクトル長、命令セット (インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512)、インテル® アドバンスト・ベクトル・エクステンション 2 (インテル® AVX2) など)
- 実行された浮動小数点操作/整数操作の数
- 計算処理の命令数とメモリー操作の命令数
- レジスター使用率
- ベクトル化の改善方法
- その他
最高のパフォーマンスを達成する
アプリケーションのパフォーマンスを最大限に引き出すには、すべてのシステムリソースの使用状況に関する情報が必要です。インテル® Advisor の新しく拡張された [Summary (サマリー)] ビュー (図 1) は、アプリケーション全体のパフォーマンスがどの程度良好かを示します。
図 1: インテル® Advisor の [Summary (サマリー)] ビュー
使用されたベクトル命令セットと有用なパフォーマンス・メトリックを確認できます。新しく拡張されたビューには、相対パフォーマンスとシステムのピーク・パフォーマンスを比較するプログラムの特性セクションがあります。図 1 から、アプリケーションはいくつかの異なる命令セットを使用していることが分かります。これは調査すべきです。また、プログラムのベクトル化効率はわずか 42% です。58% の効率がどこで失われたのか、ドリルダウンして調査します。
ドリルダウン
[Survey & Roofline (サーベイ & ルーフライン)] タブ (図 2) で詳細を確認できます。[Survey (サーベイ)] ビューでは、ループごとの詳細が得られます。最も多くの時間を費やしているループに注目して、これらのループができるだけ効率良くベクトル化されるようにします。インテル® Advisor は、ループがベクトル化されたかどうかとその効率を示します。コンパイラーがループをベクトル化できなかった場合、インテル® Advisor はその理由を示します。[Performance Issues (パフォーマンス問題)] 列では、非効率な理由のヒントが得られます。
図 2: [Survey & Roofline (サーベイ & ルーフライン)] タブ
[Instruction Set Analysis (命令セット解析)]
[Instruction Set Analysis (命令セット解析)] (図 3) は、コンパイラーがコードをベクトル化するために行ったことを詳しく説明します。次の情報が得られます。- 使用されたベクトル命令セット
- ベクトル長
- 操作のデータ型