この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® Advisor Cookbook」の「Analyze Performance Remotely and Visualize Results on a Local macOS* System」(https://software.intel.com/content/www/us/en/develop/documentation/advisor-cookbook/top/analyze-performance-remotely-and-visualize-results-on-macos.html) の章の日本語参考訳です。
使用時間が厳しく管理されデータの表示や操作機能が制限されたクラスターなどの専用のリモートシステム上でアプリケーションを実行する必要がある場合は、インテル® Advisor CLI を使用してアプリケーションを解析し、インテル® Advisor GUI を使用してローカルシステム上に結果を表示すると便利です。このレシピでは、インテル® Advisor のコマンドライン・インターフェイスを使用してリモートシステム上でパフォーマンス・データを収集し、インテル® Advisor GUI を使用してローカル macOS* システム上に結果を表示する方法を説明します。
シナリオ
これは、ハイパフォーマンスな、並列化およびベクトル化されたコードを使用時間が厳しく管理されデータの表示や操作機能が制限されたクラスターなどの専用のリモートシステム上で実行する一般的なユースケースです。パフォーマンス評価ツールは通常、コマンドラインのみ実行可能なシステム上で動作します。このようなシステムでは、GUI などの多くの機能は使用できず、オンラインリソースにもアクセスできません。
macOS* システム上ではインテル® Advisor の機能は制限されており、データ収集はサポートしていません。Windows* または Linux* 上で収集されたデータを表示することは可能です。
コンポーネント
ここでは、このレシピで示される特定の結果を得るために使用したハードウェアとソフトウェアをリストします。
- パフォーマンス解析ツール: インテル® Advisor 2020 Gold
最新バージョンは、https://www.isus.jp/intel-advisor-xe/ からダウンロードできます。 - アプリケーション: インテル® Advisor のインストール・ディレクトリーにあるサンプルパッケージに含まれる vec_sample コード。
- Windows*: <install_dir>\samples\en\C++\vec_sample.zip
- Linux*: <install_dir>/samples/en/C++/vec_sample.tgz
- コンパイラー: インテル® C++ コンパイラー 2020
最新バージョンは、https://www.isus.jp/c-compilers/ からダウンロードできます。 - ターゲット・オペレーティング・システム: Microsoft* Windows* 10 Enterprise
- CPU: インテル® Core™ i5-6300U プロセッサー
必要条件
- デバッグ情報を有効にし、インラインデバッグ情報を含めるように設定して解析するアプリケーションをビルドします。詳細は、インテル® Advisor 導入ガイドの解析を始める前にを参照してください。
- 推奨事項: 解析するアプリケーション、アプリケーションのバイナリー、シンボル情報、およびソースコードは、ローカルマシンとリモートマシンの両方から見える共有ドライブ上に配置してください。
リモートシステム上でパフォーマンス・データを収集
リモートシステム上で、アプリケーションのパフォーマンス・データを収集できます。このレシピでは、インテル® Advisor CLI を使用して、ルーフライン、メモリー・アクセス・パターン、および依存関係データを収集する方法を説明します。
GUI からアプリケーションのコマンドラインを取得
注
アプリケーション、アプリケーションのバイナリー、シンボル情報、およびソースコードは、ローカルマシンとリモートマシンの両方から見える共有ドライブ上に配置してください。共有ドライブ上に配置しない場合は、取得したコマンドを実行する前に、コマンドのパスをアプリケーションの正しいパスに変更する必要があります。
ローカルマシン上でインテル® Advisor GUI を使用して、リモートシステム上にコピーして実行できる、アプリケーションの解析を実行するコマンドラインを取得します。
- ローカルマシン上でインテル® Advisor GUI を開きます。
- プロジェクトのプロパティーを設定します。
- 目的の解析で [ワークフロー] タブの [コマンドラインの取得] ボタンをクリックします。
- 表示されたダイアログから、生成されたコマンドラインをコピーします。
例えば、ルーフライン解析の場合、インテル® Advisor は、サーベイ解析およびトリップカウントと FLOP 解析の 2 つのコマンドを生成します。コマンドには、プロジェクトのプロパティーで設定されたバイナリー、シンボル、およびソースファイルの検索パスなどのパラメーターが含まれます。
- オプション: アプリケーション、アプリケーションのバイナリー、シンボル情報、およびソースコードが共有ドライブ上に配置されていない場合、ローカルパスをリモートシステムの正しいパスに変更します。
- リモートシステムに切り替えて、コピーしたコマンドラインを実行します。
コマンドラインをクリップボードへコピーする方法は、インテル® Advisor ユーザーズガイドの [対応する advixe-cl コマンドオプション] ダイアログボックスを参照してください。
注
ローカル macOS* システム上で結果を表示する場合、収集とファイナライズの時間を短縮する –no-auto-finalize オプションの使用は推奨しません。ターゲット (リモート) システム上で解析とファイナライズをすべて行うことを推奨します。macOS* システムでは同じバージョンのコンパイラー、ランタイム、数学ライブラリー、および解析したアプリケーション・スタックのほかの部分を利用できない可能性があるため、ターゲットシステム上でファイナライズをすべて行うほうが、これらの情報を適切にキャプチャーできます。
ルーフライン解析を実行
リモートシステム上で次の操作を行います。
- コマンドプロンプトからルーフライン解析を実行します。例えば、ショートカット –collect=roofline コマンドを使用します。
advixe-cl --collect=roofline --project-dir=/user/test/vec_project --search-dir sym:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir bin:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir src:p=&amp;lt;sample_dir&amp;gt;/vec_samples -- &amp;lt;sample_dir&amp;gt;/vec_sample/vec_samples
- オプション: ルーフライン・レポートのみ必要な場合は、次のコマンドを使用して HTML ファイルとしてエクスポートします。
advixe-cl --report=roofline --project-dir=/user/test/vec_project --report-output=./roofline.html
ルーフ解析の詳細は、インテル® Advisor ユーザーズガイドのルーフライン解析を参照してください。
メモリー・アクセス・パターン解析と依存関係解析を実行
非効率なメモリー・アクセス・パターンを検出したり、反復間にデータの依存関係があるか判断するには、サーベイやルーフライン解析の結果を取得した後、特定のループに詳細な解析を実行します。
リモートシステム上で次の操作を行います。
- –mark-up-loops オプションを使用して解析するループをマークします。filename:linenumber 形式でソースの位置のカンマ区切りのリストを指定します。foo.cpp ファイルの 34 行目と bar.cpp ファイルの 192 行目をマークするには、次のコマンドを実行します。
advixe-cl --mark-up-loops --select=foo.cpp:34,bar.cpp:192 --project-dir=/user/test/vec_project --search-dir sym:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir bin:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir src:p=&amp;lt;sample_dir&amp;gt;/vec_samples -- &amp;lt;sample_dir&amp;gt;/vec_sample/vec_samples
注
特に明記されていない限り、これらのループは将来のトリップカウント、メモリー・アクセス・パターン、および依存関係解析でも選択されたままです。
- マークしたループのメモリー・アクセス・パターン・データを収集します。
advixe-cl --collect=map --project-dir=/user/test/vec_project --search-dir sym:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir bin:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir src:p=&amp;lt;sample_dir&amp;gt;/vec_samples -- &amp;lt;sample_dir&amp;gt;/vec_sample/vec_samples
- マークしたループに依存関係解析を実行します。
advixe-cl --collect=dependencies --project-dir=/user/test/vec_project --search-dir sym:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir bin:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir src:p=&amp;lt;sample_dir&amp;gt;/vec_samples -- &amp;lt;sample_dir&amp;gt;/vec_sample/vec_samples
ヒント
収集中に –mark-up-list オプションを使用して、1 つの解析向けにループをマークすることもできます。このオプションでは、ループ ID またはソースの位置のカンマ区切りのリストを指定します。ID またはソースの位置を取得するには、CLI で生成したサーベイレポートを使用するか、GUI で [サーベイ] レポートタブのチェックボックスでループを選択して [ワークフロー] ペインの対応するコマンドラインを取得します。
解析するループを特定したら、–mark-up-list オプションを指定して選択した解析を実行します。例えば、ループ ID を指定してメモリー・アクセス・パターン解析を行うには、次のコマンドを実行します。
advixe-cl --collect=map --mark-up-list=58,72 --project-dir=/user/test/vec_project --search-dir sym:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir bin:p=&amp;lt;sample_dir&amp;gt;/vec_samples --search-dir src:p=&amp;lt;sample_dir&amp;gt;/vec_samples -- &amp;lt;sample_dir&amp;gt;/vec_sample/vec_samples
ローカル macOS* システム上で結果を表示
ローカルシステム上で結果を表示するには、結果をリモートシステムからコピーする必要があります。次のいずれかの操作を行います。
- オプション 1。ローカルマシンとリモートマシンの両方から見える共有ドライブがない場合。
- リモートシステムで、解析結果をスナップショット・ファイル my_proj_snapshot.advixeexpz にパックします。
advixe-cl --snapshot --project-dir=/user/test/vec_project --pack --cache-sources --cache-binaries -- /tmp/my_proj_snapshot
- my_proj_snapshot.advixeexpz をローカル macOS* システムにコピーします。
- ローカル macOS* システムに切り替えます。
- インテル® Advisor GUI でスナップショットを開きます。
- コマンドプロンプトから:
advixe-gui my_proj_snapshot.advixeexpz
- GUI から: インテル® Advisor を起動し、[ファイル] > [開く] > [結果] を選択して、コピーしたスナップショットに移動します。
- コマンドプロンプトから:
- 結果を表示します。
- リモートシステムで、解析結果をスナップショット・ファイル my_proj_snapshot.advixeexpz にパックします。
- オプション 2。ローカルマシンとリモートマシンの両方から見える共有ドライブがある場合。
- vec_project ディレクトリーを共有ドライブにコピーします。
- インテル® Advisor GUI でプロジェクトを開きます。
- コマンドプロンプトから:
advixe-gui vec_project
- GUI から: インテル® Advisor を起動し、[ファイル] > [開く] > [プロジェクト] を選択します。
- コマンドプロンプトから:
- [ファイル] > [プロジェクトのプロパティー] を選択し、[バイナリー/シンボル検索] タブと [ソース検索] タブの共有で解析したアプリケーションのバイナリー、シンボル、およびソースのパスを設定します。
- 結果を表示します。
- オプション 3 (ルーフラインのみ)。ルーフライン・レポートのみ必要で、レポートを HTML ファイルとしてエクスポートしている場合。
- HTML レポートを共有ドライブまたはローカル macOS* システムにコピーします。
- ローカル macOS* システムに切り替えます。
- レポートを Web ブラウザーで開いて結果を表示します。
結果が表示されたら、GUI のすべてのコンテンツをローカル macOS* システムで利用できます。インテル® Advisor の解析結果を表示して、非効率なベクトル化と最適化の機会を識別したり、ルーフライン・グラフを確認できます。これらのパフォーマンス測定はすべてソースコードとアセンブリーにマップされます。
要約
- リモート Linux* クラスターノード上に GUI をセットアップすることなく、ローカル (macOS* または Windows*) システム上で、インテル® Advisor GUI を利用できます。
- macOS* システム上で新しい解析を実行することはできませんが、インテル® Advisor CLI を使用してクラスターシステムなどのリモートシステム上で生成された結果を表示することはできます。
関連情報
このレシピで参照しているドキュメントとリソースのリンク:
- インテル® Advisor ユーザーズガイド: [対応する advixe-cl コマンドオプション] ダイアログボックス
- インテル® Advisor ユーザーズガイド: ルーフライン解析
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。