ターゲットのグラフィックス処理ユニット (GPU) デバイス上で MPI アプリケーションのパフォーマンスをモデル化し、アプリケーションを GPU にオフロードすることで高速化できるか判断できます。
インテル® Advisor のオフロードのモデル化パースペクティブには、次のステップが含まれます。
必要条件: 環境変数を設定して、インテル® Advisor CLI を有効にします。
以下を前提とします。
注意: 以下のコマンドでは、コマンドを実行する前にアプリケーションのパスと名前に置き換える必要があります。アプリケーションが引数を必要とする場合、実行可能ファイル名の後にそれらを指定します。
この例では、オフロードのモデル化を実行し、MPI アプリケーションのランク 1 のパフォーマンスをモデル化する方法を示します。インテル® MPI ライブラリーの gtool オプションを使用して、ベースライン CPU のパフォーマンス・データを収集します。その他の収集オプションについては MPI アプリケーションの解析を参照してください。
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 アプリケーションの解析を参照してください。
mpirun -gtool "advisor --collect=survey --auto-finalize --static-instruction-mix --project-dir=./advi_results:1" -n 4 ./mpi_sample
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
advisor --collect=projection --config=xehpg_512xve --mpi-rank=1 --project-dir=./advi_results
一度にパフォーマンスをモデル化できるのは 1 つのランクのみです。結果は、対応する ./advi_results/rank.1 ディレクトリーで指定されたランクに対し生成されます。
デフォルトでは、オフロードのモデル化は単一ランク MPI アプリケーションのパフォーマンスをモデル化するように最適化されています。複数ランクの MPI アプリケーションでは、追加の構成と設定を適用して、特定のハードウェアまたはアプリケーションのパフォーマンス・モデルを調整できます。GPU タイルごとに実行する MPI ランクの数を調整したり、レポートから MPI 時間を除外したりできます。
以下を前提とします。
注意: 以下のコマンドでは、コマンドを実行する前にアプリケーションのパスと名前に置き換える必要があります。アプリケーションが引数を必要とする場合、実行可能ファイル名の後にそれらを指定します。
必要条件: 環境変数を設定して、インテル® Advisor CLI を有効にします。
デフォルトでは、オフロードのモデル化は単一の 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 に置き換えます。
例えば、./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
構文の詳細については MPI アプリケーションの解析を参照してください。
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
advisor --collect=projection --project-dir=./advi_results --set-parameter scale.Tiles_per_process=0.25 --mpi-rank=1
結果は、対応する ./advi_results/rank.1 ディレクトリーで指定されたランクに対し生成されます。それぞれの結果を開発システムに転送して、結果を表示できます。
インテル® Advisor GUI または対話型 HTML レポートで結果を開くと、設定した値を持つ [Modeling Parameters (モデル化パラメーター)] ペインにプロセスごとのタイル、またはプロセスごとのスタックのパラメーターが表示されます。パラメーターは読み取り専用です。プロセスごとのタイル、またはプロセスごとのスタック・パラメーターには、プロセスに応じた値が表示され、ペイン内の他のパラメーターにはデバイスごとに異なる値が表示されることに注意してください。
必要条件: 環境変数を設定して、インテル® Advisor CLI を有効にします。
複数ランクの MPI ワークロードでは、MPI ランタイムで消費される時間がランクごとに異なる可能性があり、これはパフォーマンスのインバランスにつながります。そのため、アプリケーション全体の時間とオフロードのモデル化の結果はランクごとに異なる場合があります。MPI 時間が長く、ランク間で異なり、MPI コードに多くの計算が含まれない場合は、MPI ルーチンで消費された時間を解析から除外して、モデル化の結果への影響を軽減します。
advisor --collect=projection --project-dir=./advi_results --ignore=MPI --mpi-rank=1
結果は ./advi_results/rank.1 ディレクトリーに生成されます。それぞれ結果を開発システムに転送して、結果を表示できます。
生成されたレポートでは、MPI 呼び出しに費やされた時間を解析から除外して、アプリケーションのセルフ時間を基にすべてのアプリケーションごとのパフォーマンス・メトリックが計算されます。これにより、ランク間のモデル化が改善されます。
インテル® Advisor は、--project-dir で指定されたプロジェクト・ディレクトリーにある、各ランクのサブディレクトリーに収集結果を保存します。モデル化の結果は、--mpi-rank オプションで指定されたように、パフォーマンスのモデル化を実行したランクに対してのみ利用できます。
特定のランクで収集されたパフォーマンスまたは依存関係の結果を表示するには、次のいずれかを実行します。
GUI で 結果を表示
インテル® Advisor GUI から、<project-dir>/rank.<n> ディレクトリーにある結果プロジェクトのファイル *.advixeproj を開きます。
コマンドラインから GUI を開くこともできます。
advisor-gui ./advi_results/rank.1
コマンドラインから結果を表示
パフォーマンスのモデル化解析を実行すると、モデル化のサマリーがターミナルまたはコマンドプロンプトに出力されます。データを調査して、推測されるスピードアップと上位 5 つのオフロード領域を確認します。
対話型の HTML レポートで結果を表示
<project-dir>/rank.<n>/e<NNN>/report にある各ランクのサブディレクトリーに生成された対話型の advisor-report HTML レポートと、<project-dir>/rank.<n>/p<NNN>/data.0 にあるランクごとの CSV レポートを開きます。