rocprofiler-pc-sampling について
rocprofiler-pc-samplingは、PCサンプリングでAMD GPUアプリケーションをプロファイルするスキルです。rocprofv3の設定手順を示し、サンプル位置のホットスポットやストール要因を集計するスクリプトを提供します。
主な機能
- 01host-trapとstochasticの設定
- 02サンプリング間隔と出力形式の指定
- 03帰属分析用のカーネルトレース取得
- 04スクリプトによるホットスポットとストール分析
- 05結果の解釈と改善案の検討
活用シーン
- 01AMD GPUカーネルの性能ホットスポット特定
- 02ワークロードのストール要因の調査
- 03PCサンプリング設定ごとの結果比較
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ amd/ skills --skill rocprofiler-pc-samplingインストール後、Claude Code で/rocprofiler-pc-samplingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.federated.jsonskill-card.mdevals/evals.jsonmachine.ymlevals/resources/cuda_demo.cudemo_program.hip.cppresources/stall-reasons.mdscripts/analyze_pc_sampling.pytests/test_analyze_pc_sampling.py詳細
PC サンプリング
前提条件
- システムに ROCm がインストールされており、アクセス可能な AMD GPU が必要です。つまり、
amd-smiを実行すると、有効なデバイスが少なくとも 1 つ返される必要があります。 - GPU は PC サンプリングに対応している必要があります。利用可能な PC サンプリングの設定は、
rocprofv3-avail info --pc-samplingまたはrocprofv3 -Lで確認できます。サンプリング方法と間隔は、このコマンドの出力に合わせる必要があります。また、各設定について報告されるフラグにも注意してください。執筆時点では、確率的サンプリングの間隔は 2 の累乗である必要があります。 - ソース行の帰属情報を取得し、実態を反映した実行プロファイルを得るには、アプリケーションをデバッグシンボルと最適化フラグ(例:
-g -O3)の両方を付けてビルドする必要があります。
PC サンプリングの使用方法
PC サンプリングを使って rocprofv3 を実行するには、次の手順に従います。
--pc-sampling-beta-enabledフラグを指定して、PC サンプリングを明示的に有効にします。--pc-sampling-methodで PC サンプリングの方法を指定します。host_trapまたはstochasticを指定できます。--pc-sampling-unitでサンプリング間隔の単位を指定します。host_trapではtime、stochasticではcyclesを指定します。--pc-sampling-intervalでサンプリング間隔を指定します。timeを指定した場合はマイクロ秒、cyclesを指定した場合はサイクル数を表す整数を指定します。- カーネル起動を追跡して帰属情報を取得するには、
--kernel-traceフラグを追加します。 --output-formatでjsonまたはcsvの出力形式を指定します。デフォルトの出力形式であるrocpdは、現在 PC サンプリングの出力に対応していません。
一般的なコマンドは次のようになります。
rocprofv3 \
--pc-sampling-beta-enabled \
--pc-sampling-method stochastic \
--pc-sampling-unit cycles \
--pc-sampling-interval 1048576 \
--kernel-trace \
--output-format json \
-- <target app>
PC サンプリングの出力
出力関連のオプション:
-d <dir>:出力先(デフォルト:%cwd%)-o <prefix>:名前のプレフィックス(デフォルト:%hostname%/%pid%)--output-format csv,json:両方の形式で出力
デフォルトのパスのパターン:<output_dir>/<output_prefix>_<name>.<ext>。上書きしない場合、プレフィックスは %hostname%/%pid% です。
出力される可能性のあるファイル
| ファイル | 形式 | 内容 |
|---|---|---|
*_pc_sampling_stochastic.csv または *_pc_sampling_host_trap.csv | CSV | フラットなサンプルレコード。サンプルごとに 1 行 |
*_agent_info.csv | CSV | GPU/CPU エージェントのメタデータ(サンプルではありません) |
*_kernel_trace.csv | CSV | カーネルのディスパッチレコード(--kernel-trace を指定した場合) |
*_results.json | JSON | すべてのデータを 1 つのファイルに格納 |
PC サンプリングのガイダンス
PC サンプリングには、host-trap と stochastic の 2 種類があります。stochastic はハードウェアの対応が必要で、利用できる GPU は少ないものの、より多くの情報が得られます。
デフォルトの出力形式である rocpd は、現在 PC サンプリングに対応していないため、json(推奨)または csv を明示的に指定する必要があります。json の出力には、より多くの情報が含まれます。
- 確率的サンプリングで対応できる値より大きなサンプリング間隔が必要な場合を除き、stochastic サンプリングを優先してください。
- stochastic サンプリングでは、より豊富な情報が得られるため、json の出力形式を優先してください。
- 確率的サンプリングの間隔は、ワークロードが短く、その間隔ではサンプル数が不十分になる場合を除き、大きめの値(2^18^-2^20^。多くの場合、上限値)を優先してください。短い間隔では、データがすぐに大量に生成されます。
- host trap の間隔は、約 1000 マイクロ秒を目安とし、必要に応じて短くしてください。
PC サンプリング結果の分析
このスキルのフォルダーには、分析スクリプト scripts/analyze_pc_sampling.py があります。出力サンプルファイル(.json または .csv)を渡すと、サンプル数が多い上位の位置と、主なストール原因を報告します。--kernel <kernel name> を指定すると、特定のカーネルに結果を絞り込むこともできます。
付属の Python スクリプトを実行して、出力ファイルの基本的な分析を行ってください。スクリプトの出力に基づいてユーザーのコードを分析し、パフォーマンスを説明したうえで、具体的かつ関連性の高い改善案を提示してください。ホットスポットと、その原因(判明している場合)、改善案があればそれをユーザーに伝えてください。注目すべき改善の可能性がない場合は、その理由を簡潔に説明してください。たとえば、転置処理はメモリに大きく依存するため、適切に記述された転置カーネルのプロファイルでも、大量の WAITCNT ストールが発生します。これは処理そのものに起因するものであり、必ずしもカーネルの問題ではありません。ただし、単純な転置カーネルでは、読み込みまたは書き込みが分散し、必要以上にメモリ転送量が増えて WAITCNT ストールが多発することがあります。
手順チェックリスト
- 上記の前提条件を満たしていることを確認する
- 対象アプリケーションのデバッグ情報を含む最新のビルドがない場合は、ビルドする
- 上記の指示に従い、rocprofv3 で PC サンプリングの設定を行ってアプリケーションをプロファイルする
- このスキルに付属する分析スクリプトをプロファイリング出力に対して実行する
- 実行が成功し、無視できない数のサンプルが得られたことを確認する
- スクリプトの出力を使って、コードの動作を分析し、改善案について具体的な指針を示す
補足事項
小規模なワークロードでは、サンプル数が少なすぎることがあります。代表性のあるサンプル数を得られるよう、ワークロードの規模を十分に大きくしてください。ソースコードが利用でき、ワークロードが小さすぎる場合は、カーネルを複数回呼び出すようコードを変更し、プロファイリングの実行後に元の状態へ戻すことを検討してください。
ホストトラップサンプリングでは、命令の「スキッド」が1~2命令分発生することがあります。サンプルの帰属先が不自然な場合は、周辺の命令と分岐先を確認してください。
ストールの種類と原因の概要は、このスキルの resources/stall-reasons.md にあります。
rocm-systems リポジトリには、このフォルダーに PC サンプリングのドキュメントが複数あります: projects/rocprofiler-sdk/source/docs/how-to/。また、こちらでも確認できます:https://rocm.docs.amd.com/projects/rocprofiler-sdk/en/develop/how-to/cdna3-cdna4-pc-sampling.html
PC サンプリングの設定は一度に1つしかサポートされません。有効な設定がちょうど1つ報告された場合は、別のプロセスが PC サンプリングを使用中である可能性があります。