インテル® Advisor XE 2016 Update 2 新機能
この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® Advisor XE 2016 Update 2 What’s new」の日本語参考訳です。
ベクトル化アシスタント・ツールの新バージョン、インテル® Advisor XE 2016 Update 2 を公開しました。新しい機能と改善点を以下に示します。
ループ、関数および SIMD 対応関数
ループに加えて関数の Survey グリッドを拡張しました。これにより、ループ、関数、そして SIMD 対応関数を含む完全なホットスポットと呼び出しツリーを見ることができます:
新しいアドバイス
新たな問題 “ベクトルレジスターのスピル” が、以前の “高いレジスターのプレッシャー” の問題に置き換わります。新しい問題はより正確に検出されるため、アドバイスは実用的です。実際に使用されるベクトルレジスターの数は、別のカラムに表示されます。多くのベクトルレジスターが使用中である場合、すべてのデータをレジスターに格納できないため、コンパイラーはレジスターをメモリーに退避する余分なコードを生成しなければいけません。これにより、命令数とメモリーアクセスが増えるためパフォーマンスに影響します。
“OpenMP function call(s) present” というアドバイスは、並列領域内でパフォーマンスを制限する可能性がある “omp_get_thread_num()” などのルーチンを使用しているため、再構成する必要があることを示唆します:
最新のインテル® Advisor は、GCC でコンパイルされたコード中のスカラー数値関数を検出できるようになりました。それらは、インテルのショート・ベクトル・マス・ライブラリー (SVML) などの SIMD 命令に置き換えることができます。以下は、デフォルトではベクトル・マス・ライブラリーを使用しない、GCC でコンパイルされたコードの例です。インテル® Advisor は、コード内と GCC コンパイラーのコマンド行で、SMVL の利用を有効にする方法をアドバイスします:
簡単に CLI/GUI で操作するためのループ選択の永続性
選択されたループのリストは異なるファイルに保存されるため、インテル® Advisor プロジェクトは永続的です。これは次の手順で可能になります:
- 単一マシンで作業している場合、CLI で結果を収集し GUI で参照します:
- GUI で参照する場合、さらに詳しく(依存関係やメモリーパターンを) 解析するため特定のループを選択します。
- 同じプロジェクトを使用して CLI で詳細な解析を実行します。GUI で選択された内容は CLI 収集に適用されます。”-mark-up-list” オプションを使用する場合、必要ありません。
- Linux* サーバーで CLI を使用して結果を収集し、結果をほかのワークステーションに転送して GUI で参照します:
- GUI で特定のループを選択し、プロジェクトをサーバーにコピーします。プロジェクトが大きすぎる場合、このファイルのみをコピーできます: “e000/loop_hashes.def” (選択内容を保存するため、ファイルを転送する前に結果を閉じます)。
- サーバーでは、”-mark-up-list” オプションを指定せずに (依存関係やメモリーパターンなどの) 詳細な解析を実行します。選択された内容は、自動的にプロジェクトからピックアップされます。
- CLI で選択内容を変更する場合、”advixe-cl -mark-up-loops” コマンドを使用します。
- 選択されたループは永続的であるため、”-collect” コマンドにマークアップ・リストを指定する必要はありません。
Trip Count 収集のファイナライズ時間を短縮
Survey 解析とは独立して Trip Count 解析を実行できるため、任意の順番で解析できます。
- Survey データを最初に収集した後に、Trip Count 解析を実行しても振る舞いは変わりません。
- Survey 解析を行わず Trip Count を最初に収集した場合、Survey 解析を実行した後に結果がファイナライズされます。これは結果の後処理時間を短縮するため、2 つの解析に対し 1 度のファイナライズを行います。両方の収集が完了すると、Trip Count と Survey の結果双方を参照できます。
メモリー・フットプリントと変数名
メモリー・アクセス・パターン解析には、MAP Source 表示で Estimated Memory Footprint (予想されるメモリー・フットプリンツ) メトリックが追加されました。これにより、ループの実行中に使用されたメモリー使用量を参照できます:
MAP/依存性解析で、オブジェクト指向コードの変数名のサポートが拡張されました。これにより Windows* と Linux* オペレーティング・システム上のグローバルとスタックに割り当てられたオブジェクトで変数名を検出できます。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。