プロファイリングツール実践ガイド
このページは、2026-06-05の勉強会でチームが整理した「用途別プロファイラ・トレースツールの全体像」をまとめたものです。 個々のツールの公式情報は参考文献を参照してください。
これは何か
性能解析ツールは、何をどの粒度で測りたいかによって使い分けます。 ここでは、抽象度(マクロ/ミドル/ミクロ)と対象レイヤ(CPU/MPI/OpenMP/GPU/メモリ)で整理します。
大局から局所へ:3つの抽象度
| 抽象度 | 計測オーバーヘッド | 手法 | 用途 | ツール例 |
|---|---|---|---|---|
| 高(マクロ) | 低 | サンプリング、全体傾向の俯瞰 | CPU/GPU/通信の「どこ」が遅いか切り分け | Linaro MAP、Nsight Systems、mpiP、IPM |
| 中(ミドル) | 中 | 関数単位のコールグラフ、MPI待機時間、メモリ推移 | 関数特定、並列インバランスの発見 | Score-P、TAU、HPCToolkit、Massif |
| 低(ミクロ) | 高 | インストルメンテーション、詳細トレース、HWイベント | 行レベルの原因解明(cache miss、依存関係) | Scalasca(trace)、Nsight Compute、Valgrind、ftrace |
レイヤ別の代表ツール
CPU(計算密度・メモリアクセス)
| アプローチ | ツール | 特徴 |
|---|---|---|
| サンプリング(低負荷・推奨) | perf | Linux標準。HWカウンタ(PMU)を読む。perf c2cでfalse sharing(偽共有)も検出 |
| サンプリング | Intel VTune Profiler | EBSでcache missをソース行へ直接マッピング |
| サンプリング | Linux ftrace | カーネルレベルの挙動(スケジューリング遅延・割り込み)を追跡 |
| インストルメンテーション(高負荷) | Callgrind(Valgrind) | 正確な命令数とコールグラフを生成。Cachegrindでcacheも模擬 |
gprofは関数プローブのオーバーヘッドが大きく、現代のHPCでは非推奨とされています。
MPI(通信・同期のオーバーヘッド)
アプリが「計算」しているのか「待機」しているのかを切り分けます。
| ツール | 特徴 |
|---|---|
mpiP | 極めて軽量。関数ごとの時間・通信量をテキストサマリで出力。最初の一手 |
| IPM | メッセージサイズごとの通信量・通信トポロジを低負荷で把握 |
| Score-P | HPC標準の計測インフラ。CUBE4形式で出力し後続解析へ繋ぐハブ |
| Scalasca | 待機状態(wait states)を定量化し、通信ボトルネックを特定 |
| TAU | MPI + OpenMP + GPUのハイブリッド環境を統合プロファイル |
| HPCToolkit | MPIとCPU HWカウンタを紐づけた統計プロファイル |
MPIトレース・タイムライン可視化
「なぜ・いつ・誰のせいで待機したか」を時系列で追います。
| ツール | 特徴 |
|---|---|
| Vampir | Score-PのOTF2トレースを読み、大規模ノードのタイムラインを可視化 |
| Cube | メトリクス・コールツリー・システムの3軸で階層的にボトルネック特定 |
| Intel Trace Analyzer (ITAC) | 「理想化(無限に速いネットワーク)」機能で通信オーバーヘッドを分離 |
| Paraver / Jumpshot | Extraeベース/レガシーMPICH向けのトレース可視化 |
GPU(ホスト連携→カーネル深掘り)
最大の罠は「いきなりGPUカーネル内部を見ること」。まずCPU-GPU間のデータ転送(PCIe)を疑います。
| 視点 | ツール | 特徴 |
|---|---|---|
| マクロ(システム全体) | Nsight Systems | CPUスレッド、GPUへのデータ転送、kernel dispatchの非効率を特定 |
| ミクロ(カーネル内部) | Nsight Compute | レジスタ使用量、メモリ帯域、命令レベルのstall原因を解析 |
| AMD ROCm環境 | rocprof (v3) | Roofline分析でHW理論限界に対する位置を可視化 |
OpenMP(並列インバランスと同期)
「CPU使用率が100%か」ではなく「有意義な計算をしているか」を問います。
| ツール | 特徴 |
|---|---|
| Intel VTune (OpenMP Wait Analysis) | アクティブ時間と待機/アイドル時間を厳密に分離 |
| Linaro MAP | 適応型サンプリングで極小ファイルサイズ。ソース改変なしで行レベルの待機を特定 |
| TAU (OMPT) | ハイブリッド実行時のタイムラインを可視化 |
メモリ(安全性検証とヒープ最適化)
| 目的 | ツール | 特徴 |
|---|---|---|
| エラー検出(安全性) | AddressSanitizer (ASan) | コンパイラベース。低負荷でCI/CDに組み込める |
| エラー検出(深掘り) | Valgrind Memcheck | 再コンパイル不要だが負荷は数十倍 |
| 使用量・ヒープ最適化 | Heaptrack | 低負荷でヒープ確保/解放をトレース。リークや無駄を特定 |
| 使用量・ヒープ最適化 | Massif (Valgrind) | メモリ使用量の推移をスナップショットで記録 |
富岳・HPCコンテストでよく使う組み合わせ
チームの調査では、富岳環境で次のツールが定番として挙がりました(実機・利用可否は要確認)。
- 必須:
mpiP/ Score-P / Cube /perf/nsys(GPU使用時) - 発展: Scalasca / Vampir / HPCToolkit / VTune
OpenFOAMのMPI最適化なら、次の流れが強力とされています。
mpiP → Score-P → Cube → Scalasca
まず何から使うか(チームの結論)
- 最初の一手は
perf+mpiP。低負荷で「当たり」をつけられる。 - 必要に応じてScore-P/Cube/Scalascaへ深掘りする。
注意点
- 富岳前提のツール構成です。2026年大会の実機は未確定なので、利用可能なツールは要確認です(調査ステータス)。
- ツールはオーバーヘッドが大きいものほど後段で使います。