ファブリック・プロファイラー (プレビュー機能) は、OpenSHMEM* アプリケーションのランタイム動作の詳細な特性を特定するパフォーマンス・ツールです。
これは、プレビュー機能です。プレビュー機能は、正式リリースに含まれるかどうかは未定です。有用性に関する皆さんからのフィードバックが、将来の採用決定の判断に役立ちます。プレビュー機能で収集されたデータは、将来のリリースで下位互換性が保証されません。
アプリケーションは 2 つのパートで構成されます。
データコレクターは、OpenSHMEM* アプリケーションの実行中にアプリケーションとネットワークの動作を監視します。
アナライザーは、アプリケーションの終了後に Linux* または Windows* で動作するツールのコレクションです。これらのツールは、プロファイル結果を対話形式で表示して、通信を中心とした各種動作を調査できます。
ファブリック・プロファイラー・ツールは、インテル® VTune™ プロファイラーの一部として提供されます。ツールのドキュメント、例題、および収集済みのトレースファイルは、ファブリック・プロファイラーのパッケージに含まれています。
ファブリック・プロファイラーのデータコレクターは、アプリケーションの OpenSHMEM* 呼び出しをインターセプトし、ネットワーク活動を監視するライブラリーとして実装されています。この情報をバイナリー・トレース・ファイルに入力します。
前提条件: module load esp を実行して、esp モジュールをロードします。データコレクターのパッケージは、環境変数 ESP_ROOT が示す先にインストールされます。
データコレクターは 2 つのサードパーティー・ライブラリーを必要とします。
PAPI は、ランタイムでシステムメトリックを収集する際に使用されます。PAPI を環境に追加するには、module load papi を実行するか、icl.utk.edu/papi/software (英語) からダウンロードしてビルドする必要があります。
OTF2 はトレースファイルの生成に使用されます。score-p.org (英語) から OTF2 を取得できます。
アナライザーは、MATLAB* ランタイム環境で動作する MATLAB* プログラムのコレクションです。これらは、トレースファイルを読み取って結果を表示します。
前提条件: アナライザーをインストールするには、MATLAB* ランタイム環境が必要です。これは、https://www.mathworks.com/products/compiler/mcr.html (英語) から無料でダウンロードできます。R2018a(9.4) 以降のバージョンを選択します。
アナライザーは、esp/bin/analyzer 下の release ディレクトリーにあります。これは、fabric_profiler_v100 という MATLAB* プログラムです。
アナライザーを開始するには fpro スクリプトを実行します。
ファブリック・プロファイラーのワークフローで次の手順を実行します。
Linux* または Windows* マシンにファブリック・プロファイラーをインストールし、次の手順でアプリケーションをビルドおよび実行します。
ソースコードにファブリック・プロファイラー領域を定義します。
名前付き領域は、アナライザーで表示およびハイライトされ、解析が改善されます。
esp_enter("<region_name>"); exit_exit("<region_name>");
ファブリック・プロファイラーのインストルメントを使用する静的リンクされたアプリケーションをビルドします。
ファブリック・プロファイラーのモジュール (esp) をロードする場合、環境変数には重要なフラグが定義されます。これらの変数を使用して、SHMEM ライブラリーの前にファブリック・プロファイラーのデータ・コレクター・ライブラリーをコードにリンクします。
例えば、Cray SHMEM を使用して (examples ディレクトリーから) fixed-round の例をビルドするには、次のように入力します。
CC -static -o fixed-round $ESP_CFLAGS fixed-round.c $ESP_LDFLAGS $ESP_LDADD
通常のビルドからの変更に準拠していることを確認してください。
C 言語アプリケーションでも C++ コンパイラーを使用してください。データ・コレクター・ライブラリーは C++ を使用しており C++ がないとリンクできません。
$ESP_CFLAGS に esp.h へのパスを追加します。また、トレースファイルの品質を向上するため、-g オプションも追加します。
$ESP_LDFLAGS にデータ・コレクター・ライブラリーのパスを追加します。
$ESP_LDADD にデータ・コレクター・ライブラリーを追加します。
ファブリック・プロファイラーのインストルメントを使用する動的にリンクされたアプリケーションをビルドします。
ファブリック・プロファイラーは、ランタイムに LD_PRELOAD を使用して、SHMEM ライブラリーの前にデータ・コレクター・ライブラリーをリンクします。そのため、ソースコードにファブリック・プロファイラー領域を追加していない限り、アプリケーションをビルドする必要はありません。
例えば、fixed-round.c アプリケーションは (examples ディレクトリーにある) C 言語で記述されています。上記の静的リンクとは異なり、この C 言語アプリケーションをファブリック・プロファイラーでインストルメントするため、C++ コンパイラーでリビルドする必要はありません。
cc -o fixed-round $ESP_CFLAGS fixed-round.c -dynamic
$ESP_CFLAGS に esp.h へのパスを設定し、-g を追加します。
ファブリック・プロファイラーのインストルメントを使用してアプリケーションを実行します。
データ・コレクター・ライブラリーは、PAPI ライブラリーと OTF2 ライブラリーを使用します。共有ライブラリーを使用する場合、module load papi を実行するか、PAPI をライブラリーのパスに追加する必要があります。score-p.org (英語) から OTF2 をダウンロードできます。
ファブリック・プロファイラーのモジュールをロードします。
module load esp
ファブリック・プロファイラーの設定パラメーターは多数あります。モジュールは、アプリケーションを最初に実行する際に十分なデフォルト値を設定します。設定パラメーターについては、別のセクションで説明します。
動的アプリケーションの場合、データ・コレクター・ライブラリーを LD_PRELOAD 変数に追加します。
次に例を示します。
export LD_PRELOAD=$ESP_ROOT/lib/libesp.so:$LD_PRELOAD srun --export=LD_PRELOAD,ALL <rest of srun command>esp モジュールをロードした場合、環境変数 ESP_LIB には libesp.so へのパスを含みます。examples ディレクトリーにある *.slurm と *.lsf サンプル・ジョブ・スクリプトを参照してください。
データコレクターを実行すると、アプリケーションの実行とネットワークのアクティビティーが監視されます。アプリケーションの実行が終了すると、トレースファイルが書き込まれます。トレースファイルへの書き込み時間を確保するため、ウォール時間に 1 割を追加してください。
アプリケーションの出力を見て、データコレクターのインストルメントが成功したことを確認します。確認するには以下を行います。
環境変数 ESP_VERBOSITY_LEVEL に 0 ではなく 1 が設定されていることを確認してください。
shmem_init を呼び出します。ファブリック・プロファイラーの起動バナーが表示されます。
shmem_finalize を呼び出します。ファブリック・プロファイラーの停止バナーが表示されます。
環境変数 ESP_VERBOSITY_LEVEL が正しく設定されていても、関数呼び出し時にバナーが表示されない場合、esp-support@intel.com までお問い合わせください。
トレースファイルをマージします。
ファブリック・プロファイラーのバナーには、トレースファイルへのパスが表示されます。トレースをマージするには、esp_merge_traces.sh スクリプトを実行します。
$ESP_ROOT/bin/esp_merge_traces.sh \ <アプリケーションの実行ファイルへのパス> <トレース・ディレクトリーのパス> <PE の数>
トレースファイルを読み取るアナライザーには 5 つのタイプがあります。いずれも、ファブリック・プロファイラーのパッケージの esp/bin/analyzer にあります。
espba- バリア・アナライザー
espfbla- 関数バックログ・アナライザー
espla- 関数レイテンシー・アナライザー
espmsa-メッセージ欠落アナライザー
espr- 結果のサマリーを含むレポート
前の手順で生成されたトレースファイルを使用するか、esp/examples/samples/trace にある事前収集されたサンプルトレースを使用できます。これらのトレースは、esp/examples ディレクトリーにある SHMEM アプリケーションに対応しています。
espr は、すべてのトレースデータを HTML 形式に統合した一般的なレポートです。examples ディレクトリーにあるサンプル・アプリケーションにはこのレポートが含まれており、SHMEM アプリケーションや MATLAB ランタイムを実行しなくても、サンプル・アプリケーションのレポートを閲覧できます。esp/examples/samples/html ディレクトリーは、{app name}_{number of Pes}.html という名前のファイルを含み、{app name}_{number of Pes}_html_files というディレクトリーに関連付けられています。ブラウザーで HTML ファイルを開くと、esp/examples/output/samples/trace にある対応するトレースファイルからアナライザーが生成したレポートが表示されます。
ファブリック・プロファイラーの動作中にアプリケーションが shmem_finalize を呼び出すと、データコレクターはアプリケーションの動作に関する情報を含む 5 つのトレースファイルに書き込みます。
トレースファイル | 形式 | 説明 |
---|---|---|
{trace-file-prefix}.uc1.func | バイナリー |
プロファイルされたすべての SHMEM 関数呼び出しに関する情報。各プロセスは異なる関数トレースファイルに書き込みます。ジョブが完了すると、それぞれの関数トレースファイルは esp/bin/collector/esp_merge_traces.sh スクリプトで 1 つのファイルにマージされます。アナライザーはマージされたファイルを使用します。 |
{trace-file-prefix}.uc1.hfi | バイナリー |
SHMEM アプリケーションの実行中、ファブリック・プロファイラーはホストのファブリック・インターフェイス・カードの送信および受信カウンターを監視します。HFI ファイルには、タイムスタンプ付きのカウンター値が格納されます。 |
{trace-file-prefix}.uc1.profile | バイナリー |
SHMEM アプリケーションの実行中、ファブリック・プロファイラーはシステムのパフォーマンスを監視し、システムの情報を収集します。このデータは profile ファイルに書き込まれます。各プロセスは異なる profile ファイルに書き込みます。ジョブが完了すると、それぞれの profile トレースファイルは、esp/bin/collector/esp_merge_traces.sh スクリプトで 1 つのファイルにマージされます。アナライザーはマージされたファイルを使用します。 |
{trace-file-prefix}.uc1.put | バイナリー |
ファブリック・プロファイラーは、各 shmem_put 呼び出しでネットワークに注入されるデータ量と、各 put 操作のデスティネーション・ノードを監視します。put ファイルにはこれらの値が含まれます。 |
{trace-file-prefix}.uc1.ev.txt | テキスト |
environment ファイルは、SHMEM アプリケーションのランタイムで定義されるすべての環境変数のリストを含みます。 |
この表では、ファブリック・プロファイラーのパッケージに含まれるアナライザーと、実行可能な関連操作について説明しています。
アナライザーのタイプ | 名前 | 目的 | 推奨される操作 |
---|---|---|---|
espba | バリア・トレース・アナライザー |
関数トレースファイルを読み取り、各 PE のソースコード内のバリア呼び出しによるバリアの待機時間を表示します。 |
|
espfbla | ファブリック・バックログ・アナライザー |
put トレースファイルを読み取り HFI トレースファイルに関連付けて、任意の時点でファブリックのバックログを視覚化します。 |
|
espla | 関数 (レイテンシー) トレース・アナライザー |
関数トレースファイルを読み取り、インストルメントされたすべての SHMEM 呼び出しの関数レイテンシーを表示します。およそ 10 万回の関数呼び出しを含むトレースファイルでは、完了までに数分かかる場合があります。デフォルト表示では、各時点におけるすべての呼び出しの複合 PE 待機時間が表示されます。 |
|
espmsa | メッセージ欠落アナライザー |
関数トレースファイルを読み取り、トレースファイル内のアクティビティーと HFI トレースファイル内のネットワークのアクティビティーを関連付けます。 |
|
espr | アナライザーのレポート |
SHMEM アプリケーションのp実行に関連する情報を収集し、HTML 形式で表示する非対話形式のレポートです。レポートが出来上がるまで数分かかることがあります。完了すると、プロファイル・トレース・ファイルと同じ場所に、同じ名前の HTML レポートが保存されます。 |
特定のアプリケーション実行のプロファイル・トレース・ファイルを選択するには、[ファイル] メニューを使用します。 |