< 目次

GPU で MPI アプリケーションのパフォーマンスをモデル化

ターゲットのグラフィックス処理ユニット (GPU) デバイス上で MPI アプリケーションのパフォーマンスをモデル化し、アプリケーションを GPU にオフロードすることで高速化できるか判断できます。

インテル® Advisor のオフロードのモデル化パースペクティブには、次のステップが含まれます。

  1. サーベイ、特性化 (トリップカウント、FLOP)、および依存関係解析を使用して、ホストデバイス上のベースラインとなるパフォーマンス・データを収集します。複数の MPI ランクのデータを収集できます。各ランクは MPI プロセスに対応します。
  2. ターゲットデバイスでアプリケーションのパフォーマンスをモデル化します。一度にパフォーマンスをモデル化できるのは 1 つのランクのみです。ランク間の潜在的なパフォーマンスの違いを調査するため、解析された異なるランクでパフォーマンスのモデル化を行うことができますが、ここでは触れません。

MPI アプリケーションのパフォーマンスをモデル化

必要条件: 環境変数を設定して、インテル® Advisor CLI を有効にします。

以下を前提とします。

この例では、オフロードのモデル化を実行し、MPI アプリケーションのランク 1 のパフォーマンスをモデル化する方法を示します。インテル® MPI ライブラリーの gtool オプションを使用して、ベースライン CPU のパフォーマンス・データを収集します。その他の収集オプションについては MPI アプリケーションの解析を参照してください。

  1. これはオプションですが、推奨されます。--dry-run オプションを使用して、アプリケーション向けに事前設定されたコマンドラインを生成します。例えば、インテル® Advisor CLI を使用してコマンドラインを生成します。
    advisor --collect=offload --dry-run --project-dir=./advi_results -- ./mpi_sample

    実行すると、指定された精度レベルでオフロードのモデル化を実行する解析コマンドのリストがターミナルやコマンドプロンプトに出力されます。上記のコマンドでは、コマンドはデフォルトの中精度で出力されます。

    advisor --collect=survey --auto-finalize --static-instruction-mix --project-dir=./advi_results -- ./mpi_sample
     advisor --collect=tripcounts --flop --stacks --auto-finalize --enable-cache-simulation --data-transfer=light --target-device=xehpg_512xve --project-dir=./advi_results -- ./mpi_sample
     advisor --collect=projection --no-assume-dependencies --config=xehpg_512xve --project-dir=./advi_results

    MPI ランチャーを使用する場合、出力された MPI 構文のコマンドを変更する必要があります。構文の詳細については MPI アプリケーションの解析を参照してください。

  2. ランク 1 でサーベイデータを収集し、./advi_results 共有プロジェクト・ディレクトリーに保存します。
    mpirun -gtool "advisor --collect=survey --auto-finalize --static-instruction-mix --project-dir=./advi_results:1" -n 4 ./mpi_sample
  3. ランク 1 のトリップカウントと FLOP データを収集します。
    mpirun -gtool "advisor --collect=tripcounts --flop --stacks --auto-finalize --enable-cache-simulation --data-transfer=light --target-device=xehpg_512xve --project-dir=./advi_results:1" -n 4 ./mpi_sample
  4. データが共有ロケーション以外にある場合、結果を表示する前にローカルシステムにデータをコピーしてください。
  5. 解析を実行した MPI アプリケーションのランク 1 のパフォーマンス・モデル。
    advisor --collect=projection --config=xehpg_512xve --mpi-rank=1 --project-dir=./advi_results

    一度にパフォーマンスをモデル化できるのは 1 つのランクのみです。結果は、対応する ./advi_results/rank.1 ディレクトリーで指定されたランクに対し生成されます。

  6. データが共有ロケーション以外にある場合、結果を表示する前にローカルシステムにデータをコピーしてください。
  7. ローカルシステムで、任意の方法で結果を表示します。

MPI アプリケーション向けにパフォーマンスのモデル化を構成

デフォルトでは、オフロードのモデル化は単一ランク MPI アプリケーションのパフォーマンスをモデル化するように最適化されています。複数ランクの MPI アプリケーションでは、追加の構成と設定を適用して、特定のハードウェアまたはアプリケーションのパフォーマンス・モデルを調整できます。GPU タイルごとに実行する MPI ランクの数を調整したり、レポートから MPI 時間を除外したりできます。

以下を前提とします。

GPU タイルごとに MPI プロセス数を変更

必要条件: 環境変数を設定して、インテル® Advisor CLI を有効にします。

インテル® Arc™ Alchemist (DG2) 以降のインテル® Xe グラフィックス製品ファミリーと以降の世代では、従来の用語から GPU アーキテクチャーの用語が変更されています。用語変更の詳細と、従来のコンテンツとの対応については、インテル® Xe グラフィックスの GPU アーキテクチャー用語を参照してください。

デフォルトでは、オフロードのモデル化は単一の MPI プロセスまたはランクが 1 つの GPU タイルにマップされることを前提としています。ターゲットデバイスの構成に合わせて、GPU タイルごとに実行する MPI ランクの数を調整するようにパフォーマンス・モデルを構成できます。

これを行うには、コマンドラインまたは TOML 設定ファイルで Tiles_per_process ターゲットデバイスのパラメーターを調整して、MPI プロセスごとのタイル数を設定する必要があります。オフロードのモデル化ターゲットの XeHPG 256 または XeHPG 512 でインテル® Arc™ グラフィックス (コード名 Alchemist) のパフォーマンスをモデル化する場合、Stack_per_process パラメーターを使用します。このパラメーターは、単一の MPI プロセスを実行する GPU タイルの割合です。例えば、8 つのプロセスを持つ MPI アプリケーションを 4 つのタイルで構成されるターゲット GPU デバイスにオフロードする場合、タイルあたり 2 つの MPI プロセスを実行するか、プロセスあたり 0.5 タイルを使用するか、パフォーマンス・モデルを調整する必要があります。

設定したプロセスごとのタイル数は自動的に調整されます。

0.01 から 12.0 の範囲を指定できます。次の値の例について考えてみます。

Tiles_per_process/Stack_per_process

タイルごとの MPI ランク数

1.0 (デフォルト)

1

12.0 ( 最大)

1/12

0.25

4

0.125

8

カスタマイズされたプロセスごとのタイル・パラメーターを使用してオフロードのモデル化を行うには、解析中にパラメーターをスケールする必要があります。この変更は 1 度限りであり、実行する解析だけに適用されます。次のコマンドでは、スケーリングに Tiles_per_process パラメーターを使用します。必要に応じて、Stack_per_process に置き換えます。

  1. プロセスごとのタイル数を変更するため、--set-parameter オプションを使用してアプリケーション向けに事前設定されたコマンドラインを生成します。collect.py スクリプトの --dry-run オプションを使用して、スケールされたパラメーターに合わせてキャッシュ構成を調整するコマンドを生成します。

    例えば、./advi_results プロジェクトのコマンドを生成し、プロセスあたり 0.25 タイルでパフォーマンスをモデル化します。これは、タイルあたり 4 つの MPI プロセスに相当します。

    advisor-python $APM/collect.py ./advi_results --set-parameter scale.Tiles_per_process=0.25 --dry-run -- ./mpi_sample

    実行すると、指定された精度レベルでオフロードのモデル化を実行する解析コマンドのリストが、次のようにターミナルやコマンドプロンプトに出力されます。

    advisor --collect=survey --project-dir=./advi_results --static-instruction-mix -- ./mpi_sample
    advisor --collect=tripcounts --project-dir=./advi_results --flop --ignore-checksums --data-transfer=medium --stacks --profile-jit --cache-sources --enable-cache-simulation --cache-config=8:64w:4k/1:192w:768k/1:4w:2m -- ./mpi_sample
    python $APM/collect.py ./advi_results  -m generic
    advisor --collect=dependencies --project-dir=./advi_results --filter-reductions --loop-call-count-limit=16 --ignore-checksums -- ./mpi_sample
  2. 生成されたコマンドラインを任意のテキストエディターにコピーして、MPI 固有の構文に合わせてコマンドを変更します。以下を追加する必要があります。
    • MPI ランチャー名と (オプション) インテル® MPI ライブラリーの gtool オプション
    • 起動する MPI プロセス数
    • gtool を使用する場合: 解析する MPI ランク数

    構文の詳細については MPI アプリケーションの解析を参照してください。

    マークアップと依存関係解析 (最後の 2 つのコマンド) は、オーバーヘッドが高くなるため省略できます。詳細については、想定される依存関係がモデル化に影響するか確認を参照してください。
  3. サーベイ、トリップカウント、および (オプション) 依存関係解析向けに変更したコマンドを 1 つずつ実行します。例えば、ランク 1 でサーベイとトリップカウント解析を実行するには、次のコマンドを使用します。
    mpirun -gtool "advisor --collect=survey --static-instruction-mix -- ./mpi_sample --project-dir=./advi_results:1" -n 4 ./mpi_sample
    mpirun  -gtool "advisor --collect=tripcounts --flop --ignore-checksums --data-transfer=medium --stacks --profile-jit --cache-sources --enable-cache-simulation --cache-config=8:64w:4k/1:192w:768k/1:4w:2m --project-dir=./advi_results:1" -n 4 ./mpi_sample
  4. --set-parameters オプションで指定された MPI プロセスごとのタイル数でパフォーマンスをモデル化します。例えば、ランク 1 でパフォーマンスをモデル化するには、次のコマンドを使用します。
    advisor --collect=projection --project-dir=./advi_results --set-parameter scale.Tiles_per_process=0.25 --mpi-rank=1

    --set-parameter scale.Tiles_per_process には、ドライランと同じ値を指定してください。

    結果は、対応する ./advi_results/rank.1 ディレクトリーで指定されたランクに対し生成されます。それぞれの結果を開発システムに転送して、結果を表示できます。

インテル® Advisor GUI または対話型 HTML レポートで結果を開くと、設定した値を持つ [Modeling Parameters (モデル化パラメーター)] ペインにプロセスごとのタイル、またはプロセスごとのスタックのパラメーターが表示されます。パラメーターは読み取り専用です。プロセスごとのタイル、またはプロセスごとのスタック・パラメーターには、プロセスに応じた値が表示され、ペイン内の他のパラメーターにはデバイスごとに異なる値が表示されることに注意してください。

MPI 時間を無視

必要条件: 環境変数を設定して、インテル® Advisor CLI を有効にします。

複数ランクの MPI ワークロードでは、MPI ランタイムで消費される時間がランクごとに異なる可能性があり、これはパフォーマンスのインバランスにつながります。そのため、アプリケーション全体の時間とオフロードのモデル化の結果はランクごとに異なる場合があります。MPI 時間が長く、ランク間で異なり、MPI コードに多くの計算が含まれない場合は、MPI ルーチンで消費された時間を解析から除外して、モデル化の結果への影響を軽減します。

  1. アプリケーションのサーベイ、トリップカウント、および (オプション) 依存関係データを収集します。詳細については MPI アプリケーションの解析を参照してください。
  2. --ignore=MPI オプションを使用して、MPI 呼び出しの時間を無視してパフォーマンスをモデル化します。
    advisor --collect=projection --project-dir=./advi_results --ignore=MPI --mpi-rank=1

    結果は ./advi_results/rank.1 ディレクトリーに生成されます。それぞれ結果を開発システムに転送して、結果を表示できます。

生成されたレポートでは、MPI 呼び出しに費やされた時間を解析から除外して、アプリケーションのセルフ時間を基にすべてのアプリケーションごとのパフォーマンス・メトリックが計算されます。これにより、ランク間のモデル化が改善されます。

このパラメータは、[Summary (サマリー)] タブのプログラム全体のメトリックにのみ影響します。個別の領域のメトリックは再計算されません。

結果を表示

インテル® Advisor は、--project-dir で指定されたプロジェクト・ディレクトリーにある、各ランクのサブディレクトリーに収集結果を保存します。モデル化の結果は、--mpi-rank オプションで指定されたように、パフォーマンスのモデル化を実行したランクに対してのみ利用できます。

特定のランクで収集されたパフォーマンスまたは依存関係の結果を表示するには、次のいずれかを実行します。

GUI で 結果を表示

インテル® Advisor GUI から、<project-dir>/rank.<n> ディレクトリーにある結果プロジェクトのファイル *.advixeproj を開きます。

コマンドラインから GUI を開くこともできます。

advisor-gui ./advi_results/rank.1

データ収集時に --no-auto-finalize オプションを使用している場合、インテル® Advisor が適切に結果をファイナライズできるよう、結果を表示する前にアプリケーションのバイナリーとソースファイルへのパスを必ず指定します。

コマンドラインから結果を表示

パフォーマンスのモデル化解析を実行すると、モデル化のサマリーがターミナルまたはコマンドプロンプトに出力されます。データを調査して、推測されるスピードアップと上位 5 つのオフロード領域を確認します。

対話型の HTML レポートで結果を表示

<project-dir>/rank.<n>/e<NNN>/report にある各ランクのサブディレクトリーに生成された対話型の advisor-report HTML レポートと、<project-dir>/rank.<n>/p<NNN>/data.0 にあるランクごとの CSV レポートを開きます。

関連情報