Linux* システムでは、ファブリック・プロファイラー (プレビュー機能) を使用して、OpenSHMEM またはインテル® SHMEM アプリケーションの実行時の動作を解析します。
これは、プレビュー機能です。プレビュー機能は、正式リリースに含まれるかどうかは未定です。皆さんが機能に対する有用性のフィードバックを送ることで、将来の採用決定の判断に役立ちます。プレビュー機能で収集されたデータは、将来のリリースで下位互換性が保証されません。
ファブリック・プロファイラーは、OpenSHMEM またはインテル® SHMEM コードのプロファイルに使用するパフォーマンス解析アプリケーションです。このアプリケーションは、これらのコードタイプの診断情報、トレースファイル、およびランタイム情報を収集して表示します。ファブリック・プロファイラーは Linux* プラットフォームでのみ実行されます。
ファブリック・プロファイラー・アプリケーションには 2 つのコンポーネントがあります。
データコレクターは、OpenSHMEM アプリケーションの実行中にアプリケーションとネットワークの動作を監視します。
アナライザーは、OpenSHMEM アプリケーションの実行が完了した後に実行されるツールのコレクションです。これらのツールは、インタラクティブな機能を使用してプロファイル結果を表示し、通信に注目した動作を調査するのに役立ちます。
ファブリック・プロファイラーは次の 2 つのモードで動作します。
OpenSHMEM モードを使用して、OpenSHMEM (SoS) ベースのアプリケーションをプロファイルします。
インテル® SHMEMモードを使用して、インテル® SHMEM API のサブセットと OpenSHMEM アプリケーションをプロファイルします。インテル® SHMEM API のサブセットを使用する場合、このモードでファブリック・プロファイラーを使用する必要があります。
ファブリック・プロファイラーを使用する
ファブリック・プロファイラー・パッケージは、インテル® VTune™ プロファイラーのインストール・パッケージにバンドルされています。vtune\<vtune_profiler_version>\fabric_profiler ディレクトリーのファブリック・プロファイラーにアクセスします。
このディレクトリーには、ファブリック・プロファイラー・アプリケーションと次のものが含まれています。
ファブリック・プロファイラーをインストールするには、データコレクターとアナライザー・コンポーネントを設定します。
データコレクターの設定
ファブリック・プロファイラーのデータコレクターは、アプリケーションの OpenSHMEM* 呼び出しやインテル® SHMEM ホスト呼び出しをインターセプトするライブラリーとして実装されています。データコレクターは、ネットワーク・アクティビティーも監視します。データコレクターは、この情報をバイナリー・トレース・ファイルに格納します。
要件:
ファブリック・プロファイラー、ランタイムでシステムメトリックを収集するのに PAPI を使用します。環境に PAPI を追加するには、 module load papi を実行します。https://icl.utk.edu/papi/ から PAPI をダウンロードしてビルドすることもできます。
Libfabric ライブラリーは、OpenSHMEM コードからファブリックへアクセスするのに役立ちます。このライブラリーは、CXI をサポートするクラスター内に存在する必要があります。これには、 module load libfabric を実行します。詳細は、Libfabric プログラマーズ・マニュアルを参照してください。
インテル® SHMEM API の一部を追跡するために、ファブリック・プロファイラーはインテル® Pin を使用します。インテル® Pin のバージョン 3.28 以降をダウンロード (英語) します。
アナライザーの設定
ファブリック・プロファイラー・アナライザーは、MATLAB* ランタイム環境で動作する MATLAB* プログラムのコレクションです。これらのプログラムは、トレースファイルを読み取り取って、結果を表示します。
要件:
アナライザーをセットアップするには、MATLAB ランタイム環境が必要です。https://www.mathworks.com/products/compiler/mcr.html から環境をダウンロードしてください。R2021b(9.11) 以降のバージョンを選択します。
ファブリック・プロファイラー・アナライザーの実行可能ファイル (fpro) は、 $ESP_ROOT/bin/analyzer/fpro_analyzer にあります。
ファブリック・プロファイラーのワークフローで次の手順を実行します。
Linux* マシンにファブリック・プロファイラーをインストールし、次の手順でアプリケーションをビルドおよび実行します。この手順では、OpenSHMEM およびインテル® SHMEM アプリケーションをビルドする方法について説明します。
ソースコードにファブリック・プロファイラー領域を定義します。これにより、アナライザーのディスプレイに名前付きの領域が表示され、解析が容易になります。
esp_enter("<region_A name>"); esp_exit("<region_A name>");enter 呼び出しと exit 呼び出しでは、同じ領域名を使用してください。
ファブリック・プロファイラーのインストルメントを使用してアプリケーションをビルドします。
必要な環境変数が設定されていることを確認してください。これには、必要に応じて setMyVars.sh を編集します。
OpenSHMEM アプリケーション:
ファブリック・プロファイラーは、実行時に LD_PRELOAD を使用して、SHMEM ライブラリーの前にデータ・コレクター・ライブラリーをリンクします。ソースコードにファブリック・プロファイラー領域を追加しなかった場合は、アプリケーションをリビルドする必要はありません。
例えば、$ESP_ROOT/examples/SHMEM/sanity アプリケーションをビルドするには、sanity アプリケーションの makefile にを使用して make を実行します。
インテル® SHMEM アプリケーション:
インテル® SHMEM アプリケーションの場合、ファブリック・プロファイラーは実行時にインテル® Pin と LD_PRELOAD の組み合わせを使用して、SHMEM ライブラリーの前にデータ・コレクター・ライブラリーをリンクします。ソースコードにファブリック・プロファイラー領域を追加しなかった場合は、アプリケーションをリビルドする必要はありません。
アプリケーションを実行。
$ESP_ROOT/bin/collector/fpro スクリプトを使用します。このスクリプトは、データ・コレクター・ライブラリーを LD_PRELOAD 変数に追加します。データ・コレクター・ライブラリーは PAPI ライブラリーを使用します。module load papi を実行するか、PAPI をライブラリーのパスに追加する必要があります。
OpenSHMEM アプリケーション:
たとえば、sanity アプリケーションで fpro を実行するには、
$ESP_ROOT/bin/collector/ ディレクトリーに移動して、
./fpro -j pbs -r "R1234" -n 1 -p 2 -l 1 $ESP_ROOT/examples/SHMEM/sanity/sanity を実行します。
-l 1 は、sanity が OpenSHMEM アプリケーションであることを示します。必ず自身の PBS 予約番号を使用してください。インテル® SHMEM アプリケーション:
たとえば、インテル® SHMEM sycl_sanity アプリケーションで fpro を実行するには、
$ESP_ROOT/bin/collector ディレクトリーへ移動して、
./fpro -j pbs -r "R1234" -n 1 -p 2 -l 0 $ESP_ROOT/examples/iSHMEM/sycl_sanity/sycl_sanity を実行します。
-l 0 は、sycl_sanity がインテル® SHMEM アプリケーションであることを示します。
データコレクターは、ネットワーク・アクティビティーとアプリケーションの実行を監視します。実行が完了すると、データコレクターは出力をトレースファイルに書き込みます。このフェーズでは、ウォールタイムがさらに 10% 増加する可能性があります。
トレースファイルを生成するには、アプリケーションの出力を確認します。
データコレクターによるコードのインストルメントが成功したことを確認します。ESP_VERBOSITY_LEVEL 環境変数が 0 より大きい場合、成功したことを示しています。
shmem_init (OpenSHMEM アプリケーション) または ishmem_init (インテル® SHMEM アプリケーション) を呼び出します。ファブリック・プロファイラーの起動バナーが表示されます。
shmem_finalize (OpenSHMEM アプリケーション) または ishmem_finalize (インテル® SHMEM アプリケーション) を呼び出します。ファブリック・プロファイラーの停止バナーが表示されます。
Fpro スクリプトはトレースファイルをマージします。このスクリプトでは、次のツールを順番に使用します:
アナライザーを使用してトレースファイルを表示できるようになりました。
ファブリック・プロファイラーは、トレースファイルの読み取りに役立つ 5 つの異なるアナライザーのセットを提供します。ファブリック・プロファイラー・アプリケーションでは、すべてのアナライザーが $ESP_ROOT/bin/analyzer ディレクトリーにあります。5 つのアナライザー:
ba - バリア・アナライザー
fbla - ファブリック・バックログ・アナライザー
la - ファブリック・レイテンシー・アナライザー
msa - メッセージ欠落アナライザー
r - すべてのアナライザー結果の概要を含む HTML レポート。
これらのすべてのアナライザーには、$ESP_ROOT/bin/analyzer/ ディレクトリーの fpro_analyzer 実行可能ファイルを介してアクセスします。コマンドプロンプトから実行ファイルを実行できます。
ヘルプメニューにアクセスするには、次のコマンドを実行します:
$ ./fpro_analyzer --help
コマンド | 目的 |
---|---|
fpro_analyzer --help |
使い方を表示します |
fpro_analyzer --version | -v | -V |
バージョンとビルド情報を表示します |
fpro_analyzer - start |
ファブリック・バックログ・アナライザーを起動します |
fpro_analyzer {ba|fbla|la|msa|r} |
ba、fbla、la、msa、または r アナライザーを起動します |
fpro_analyzer <trace file> |
指定されたトレースファイルを使用してファブリック・バックログ・アナライザーを開きます |
fpro_analyzer {ba|fbla|la|msa|r} <trace file> |
指定されたトレースファイルを使用してアナライザーを開きます |
fpro_analyzer {ba|fbla|la|msa|r} <fabric select> <trace file> |
選択したアナライザーとファブリックを、指定したトレースファイルで開きます。 ファブリックには、Cray-Slingshot11 (または 1) または Cray-Aries (または 2) を選択します。 |
トレースのフルパスまたはトレースを含むディレクトリーでトレースファイルを指定できます。たとえば、以下はどちらも有効なコマンドです:
fpro_analyzer fbla /path/to/traces/
fpro_analyzer fbla /path/to/traces/my_trace.uc1.put
このセクションで説明したオプションを使用する例をいくつか示します。
$ ./fpro_analyzer
$ ./fpro_analyzer msa
$ ./fpro_analyzer la Cray-Slingshot11 /path/to/traces/
アプリケーションが shmem_finalize または ishmem_finalize を呼び出すと、データコレクターはアプリケーションの動作に関する情報を含む 5 つのトレースファイルを書き込みます。
トレースファイル | 形式 | 説明 |
---|---|---|
{trace-file-prefix}.uc1.func | バイナリー |
プロファイルされたすべての SHMEM 関数呼び出しに関する情報。各プロセスは異なる関数トレースファイルに書き込みます。ジョブが完了すると、個々の関数トレース ファイルは $ESP_ROOT/bin/collector/mergeFuncFile スクリプトによって 1 つのファイルにマージされます。アナライザーにはこのマージされたファイルが必要です。 |
{trace-file-prefix}.uc1.hfi | バイナリー |
SHMEM アプリケーションの実行中、ファブリック・プロファイラーはホストのファブリック・インターフェイス・カードの送信および受信カウンターを監視します。HFI ファイルには、タイムスタンプ付きのカウンター値が格納されます。 |
{trace-file-prefix}.uc1.profile | バイナリー |
SHMEM アプリケーションの実行中、ファブリック・プロファイラーはシステムのパフォーマンスを監視し、システムの情報を収集します。このデータは profile ファイルに書き込まれます。各プロセスは異なる profile ファイルに書き込みます。ジョブが完了すると、個々のプロファイル・トレース・ファイルは $ESP_ROOT/bin/collector/mergeProfileFile バイナリーを使用して 1 つのファイルにマージされます。アナライザーにはこのマージされたファイルが必要です。 |
{trace-file-prefix}.uc1.put | バイナリー |
ファブリック・プロファイラーは、各 shmem_put 呼び出しでネットワークに注入されるデータ量と、各 put 操作のデスティネーション・ノードを監視します。put ファイルにはこれらの値が含まれます。 ジョブが完了すると、個々の put トレース ファイルは $ESP_ROOT/bin/collector/mergePutFile バイナリーを使用して 1 つのファイルにマージされます。 |
{trace-file-prefix}.uc1.ev.txt | テキスト |
environment ファイルは、SHMEM アプリケーションのランタイムで定義されるすべての環境変数のリストを含みます。 |
アナライザーのタイプ | 名前 | 目的 | 利用可能な操作 |
---|---|---|---|
ba | バリア・トレース・アナライザー |
関数トレースファイルを読み取り、各 PE のソースコード内のバリア呼び出しによるバリアの待機時間を表示します。 |
|
fbla | ファブリック・バックログ・アナライザー |
put トレースファイルを読み取り HFI トレースファイルに関連付けて、任意の時点でファブリックのバックログを視覚化します。 |
|
la | ファブリック (レイテンシー) トレース・アナライザー |
関数トレースファイルを読み取り、インストルメントされたすべての SHMEM 呼び出しのファブリック・レイテンシーを表示します。およそ 10 万回の関数呼び出しを含むトレースファイルでは、完了までに数分かかる場合があります。デフォルト表示では、各時点におけるすべての呼び出しの複合 PE 待機時間が表示されます。 |
|
msa | メッセージ欠落アナライザー |
関数トレースファイルを読み取り、トレースファイル内のアクティビティーと HFI トレースファイル内のネットワークのアクティビティーを関連付けます。 |
|
r | アナライザーのレポート |
SHMEM アプリケーションのp実行に関連する情報を収集し、HTML 形式で表示する非対話形式のレポートです。レポートが出来上がるまで数分かかることがあります。完了すると、プロファイル・トレース・ファイルと同じ場所に、同じ名前の HTML レポートが保存されます。 |
特定のアプリケーション実行のプロファイル・トレース・ファイルを選択するには、[ファイル] メニューを使用します。 |