ファブリック・プロファイラーと OpenSHMEM* コード解析

Linux* システムでは、ファブリック・プロファイラー (プレビュー機能) を使用して、OpenSHMEM またはインテル® SHMEM アプリケーションの実行時の動作を解析します。

これは、プレビュー機能です。プレビュー機能は、正式リリースに含まれるかどうかは未定です。皆さんが機能に対する有用性のフィードバックを送ることで、将来の採用決定の判断に役立ちます。プレビュー機能で収集されたデータは、将来のリリースで下位互換性が保証されません。

ファブリック・プロファイラーは、OpenSHMEM またはインテル® SHMEM コードのプロファイルに使用するパフォーマンス解析アプリケーションです。このアプリケーションは、これらのコードタイプの診断情報、トレースファイル、およびランタイム情報を収集して表示します。ファブリック・プロファイラーは Linux* プラットフォームでのみ実行されます。

ファブリック・プロファイラーの導入

ファブリック・プロファイラー・アプリケーションには 2 つのコンポーネントがあります。

ファブリック・プロファイラーは次の 2 つのモードで動作します。

ファブリック・プロファイラーを使用する

ファブリック・プロファイラー・パッケージは、インテル® VTune™ プロファイラーのインストール・パッケージにバンドルされています。vtune\<vtune_profiler_version>\fabric_profiler ディレクトリーのファブリック・プロファイラーにアクセスします。

このディレクトリーには、ファブリック・プロファイラー・アプリケーションと次のものが含まれています。

  • 製品のドキュメント
  • サンプルのトレースファイル

ファブリック・プロファイラーのインストール

ファブリック・プロファイラーをインストールするには、データコレクターとアナライザー・コンポーネントを設定します。

データコレクターの設定

ファブリック・プロファイラーのデータコレクターは、アプリケーションの OpenSHMEM* 呼び出しやインテル® SHMEM ホスト呼び出しをインターセプトするライブラリーとして実装されています。データコレクターは、ネットワーク・アクティビティーも監視します。データコレクターは、この情報をバイナリー・トレース・ファイルに格納します。

要件:

  • データ・コレクター・パッケージを展開します。
  • ESP_ROOT 環境変数を、データコレクターを展開した場所を指すように設定します。
  • 必要なライブラリーをインストール:
    • ファブリック・プロファイラー、ランタイムでシステムメトリックを収集するのに 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 にあります。

ファブリック・プロファイラーのワークフロー

ファブリック・プロファイラーのワークフローで次の手順を実行します。

  1. データコレクターを使用してアプリケーションをビルドし実行します。
  2. トレースファイルを生成します。
  3. アナライザーを使用してトレースファイルを表示します。

ステップ 1: アプリケーションをビルドして実行

Linux* マシンにファブリック・プロファイラーをインストールし、次の手順でアプリケーションをビルドおよび実行します。この手順では、OpenSHMEM およびインテル® SHMEM アプリケーションをビルドする方法について説明します。

  1. ソースコードにファブリック・プロファイラー領域を定義します。これにより、アナライザーのディスプレイに名前付きの領域が表示され、解析が容易になります。

    1. esp.h ヘッダーファイルをインクルードします。
    2. 注目する領域をマークします:
      esp_enter("<region_A name>"); 
      esp_exit("<region_A name>");
      enter 呼び出しと exit 呼び出しでは、同じ領域名を使用してください。
    3. アプリケーションをリビルドします。

    領域を入れ子またはインターリーブすることはできません。
  2. ファブリック・プロファイラーのインストルメントを使用してアプリケーションをビルドします。

    必要な環境変数が設定されていることを確認してください。これには、必要に応じて setMyVars.sh を編集します。

    • OpenSHMEM アプリケーション:

      ファブリック・プロファイラーは、実行時に LD_PRELOAD を使用して、SHMEM ライブラリーの前にデータ・コレクター・ライブラリーをリンクします。ソースコードにファブリック・プロファイラー領域を追加しなかった場合は、アプリケーションをリビルドする必要はありません。

      例えば、$ESP_ROOT/examples/SHMEM/sanity アプリケーションをビルドするには、sanity アプリケーションの makefile にを使用して make を実行します。

    • インテル® SHMEM アプリケーション:

      インテル® SHMEM アプリケーションの場合、ファブリック・プロファイラーは実行時にインテル® Pin と LD_PRELOAD の組み合わせを使用して、SHMEM ライブラリーの前にデータ・コレクター・ライブラリーをリンクします。ソースコードにファブリック・プロファイラー領域を追加しなかった場合は、アプリケーションをリビルドする必要はありません。

  3. アプリケーションを実行。

    $ESP_ROOT/bin/collector/fpro スクリプトを使用します。このスクリプトは、データ・コレクター・ライブラリーを LD_PRELOAD 変数に追加します。データ・コレクター・ライブラリーは PAPI ライブラリーを使用します。module load papi を実行するか、PAPI をライブラリーのパスに追加する必要があります。

    • OpenSHMEM アプリケーション:

      たとえば、sanity アプリケーションで fpro を実行するには、

      1. $ESP_ROOT/bin/collector/ ディレクトリーに移動して、

      2. ./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 を実行するには、

      1. $ESP_ROOT/bin/collector ディレクトリーへ移動して、

      2. ./fpro -j pbs -r "R1234" -n 1 -p 2 -l 0 $ESP_ROOT/examples/iSHMEM/sycl_sanity/sycl_sanity を実行します。

        -l 0 は、sycl_sanity がインテル® SHMEM アプリケーションであることを示します。

ステップ 2: トレースファイルの生成

データコレクターは、ネットワーク・アクティビティーとアプリケーションの実行を監視します。実行が完了すると、データコレクターは出力をトレースファイルに書き込みます。このフェーズでは、ウォールタイムがさらに 10% 増加する可能性があります。

トレースファイルを生成するには、アプリケーションの出力を確認します。

  1. データコレクターによるコードのインストルメントが成功したことを確認します。ESP_VERBOSITY_LEVEL 環境変数が 0 より大きい場合、成功したことを示しています。

    1. shmem_init (OpenSHMEM アプリケーション) または ishmem_init (インテル® SHMEM アプリケーション) を呼び出します。ファブリック・プロファイラーの起動バナーが表示されます。

    2. shmem_finalize (OpenSHMEM アプリケーション) または ishmem_finalize (インテル® SHMEM アプリケーション) を呼び出します。ファブリック・プロファイラーの停止バナーが表示されます。

  2. Fpro スクリプトはトレースファイルをマージします。このスクリプトでは、次のツールを順番に使用します:

    1. mergeFuncFile
    2. mergeProfileFile
    3. mergePutFile
  3. マージされたトレースファイルを、トレース・ディレクトリーのルートレベルからアナライザーをインストールしたマシンにコピーします。

アナライザーを使用してトレースファイルを表示できるようになりました。

ステップ 3: アナライザー・スイートを使用してトレースファイルを表示

ファブリック・プロファイラーは、トレースファイルの読み取りに役立つ 5 つの異なるアナライザーのセットを提供します。ファブリック・プロファイラー・アプリケーションでは、すべてのアナライザーが $ESP_ROOT/bin/analyzer ディレクトリーにあります。5 つのアナライザー:

アナライザー・セットにアクセス

これらのすべてのアナライザーには、$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
  • fpro_analyzer 実行可能ファイルを実行し、メッセージ欠落アナライザーを起動します:
    $ ./fpro_analyzer msa
  • fpro_analyzer 実行可能ファイルを実行し、関数レイテンシー・アナライザーを起動して、Cray-Slingshot11 ファブリックのトレースを確認します:
    $ ./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 のソースコード内のバリア呼び出しによるバリアの待機時間を表示します。

  • 以下の測定します:

    • PE 待機時間
    • PE 到達時間
    • ノード待ち密度
    • PE パーセント率
    • PE 異常値率
  • しきい値を変化させます。
  • 結果を特定の字句の出現に制限します (バリアを含む特定のソースコード行)。
fbla

ファブリック・バックログ・アナライザー

put トレースファイルを読み取り HFI トレースファイルに関連付けて、任意の時点でファブリックのバックログを視覚化します。

  • [領域の境界を表示] を選択し、注目する領域を選びます。SHMEM コードで定義されたコード領域の場合、時間に対するネットワークのバックログのグラフで、時間領域がハイライトされます。

  • 個々のノードを選択して関連するバックログを表示します。

  • 注入および/または排出バックログの表示

    • 注入を要求: アプリケーションによって別のノードに送信されるデータ

    • 実際の注入: ホスト・ファブリック・インターフェイス (HFI) によって実際にネットワークに送信されるデータ

    • 排出を要求: 現在のノードが受信したデータ

    • 実際の排出: HFI に従ってネットワークから実際に受信したデータ

  • ズームとパンで領域に焦点を合わせます。

  • オフセットの調整モードを試してください。

  • トグル表示とレート (比率) 表示を切り替えます。

  • データカーソルを使用します。ウィジェットを最初にクリックします。次に、プロット上の任意の場所をクリックすると、そのポイントのデータが表示されます。

la

ファブリック (レイテンシー) トレース・アナライザー

関数トレースファイルを読み取り、インストルメントされたすべての SHMEM 呼び出しのファブリック・レイテンシーを表示します。およそ 10 万回の関数呼び出しを含むトレースファイルでは、完了までに数分かかる場合があります。デフォルト表示では、各時点におけるすべての呼び出しの複合 PE 待機時間が表示されます。

  • 個々の関数呼び出しを選択し、それぞれの呼び出しレイテンシーのホットスポットを表示します。

  • アプリケーションがファブリック・プロファイラー領域を定義している場合、[領域を表示] をクリックします。領域を選択すると、コード領域を表すグラフ上の時間スパンがハイライト表示されます。

  • 通信マトリクスに切り替えます。これは、各処理要素 (PE) から他の PE に送信されるデータ量を可視化したものです。

  • ズーム、パン、データ・カーソル・ウィジェット (ファイルメニューとヘルプメニューの下) を使用して、表示データをドリルダウンすることができます。

  • 周波数、高値、低値のしきい値の調整を試してください。

msa

メッセージ欠落アナライザー

関数トレースファイルを読み取り、トレースファイル内のアクティビティーと HFI トレースファイル内のネットワークのアクティビティーを関連付けます。

 
r

アナライザーのレポート

SHMEM アプリケーションのp実行に関連する情報を収集し、HTML 形式で表示する非対話形式のレポートです。レポートが出来上がるまで数分かかることがあります。完了すると、プロファイル・トレース・ファイルと同じ場所に、同じ名前の HTML レポートが保存されます。

特定のアプリケーション実行のプロファイル・トレース・ファイルを選択するには、[ファイル] メニューを使用します。