Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

プロファイリングツール実践ガイド

このページは、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(計算密度・メモリアクセス)

アプローチツール特徴
サンプリング(低負荷・推奨)perfLinux標準。HWカウンタ(PMU)を読む。perf c2cでfalse sharing(偽共有)も検出
サンプリングIntel VTune ProfilerEBSでcache missをソース行へ直接マッピング
サンプリングLinux ftraceカーネルレベルの挙動(スケジューリング遅延・割り込み)を追跡
インストルメンテーション(高負荷)Callgrind(Valgrind)正確な命令数とコールグラフを生成。Cachegrindでcacheも模擬

gprofは関数プローブのオーバーヘッドが大きく、現代のHPCでは非推奨とされています。

MPI(通信・同期のオーバーヘッド)

アプリが「計算」しているのか「待機」しているのかを切り分けます。

ツール特徴
mpiP極めて軽量。関数ごとの時間・通信量をテキストサマリで出力。最初の一手
IPMメッセージサイズごとの通信量・通信トポロジを低負荷で把握
Score-PHPC標準の計測インフラ。CUBE4形式で出力し後続解析へ繋ぐハブ
Scalasca待機状態(wait states)を定量化し、通信ボトルネックを特定
TAUMPI + OpenMP + GPUのハイブリッド環境を統合プロファイル
HPCToolkitMPIとCPU HWカウンタを紐づけた統計プロファイル

MPIトレース・タイムライン可視化

「なぜ・いつ・誰のせいで待機したか」を時系列で追います。

ツール特徴
VampirScore-PのOTF2トレースを読み、大規模ノードのタイムラインを可視化
Cubeメトリクス・コールツリー・システムの3軸で階層的にボトルネック特定
Intel Trace Analyzer (ITAC)「理想化(無限に速いネットワーク)」機能で通信オーバーヘッドを分離
Paraver / JumpshotExtraeベース/レガシーMPICH向けのトレース可視化

GPU(ホスト連携→カーネル深掘り)

最大の罠は「いきなりGPUカーネル内部を見ること」。まずCPU-GPU間のデータ転送(PCIe)を疑います。

視点ツール特徴
マクロ(システム全体)Nsight SystemsCPUスレッド、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へ深掘りする。

perf の実践的な使い方(チーム調査メモ)

2026-06-19の勉強会で田中が共有した内容。perfは日本語情報が少なく、man、Archwiki、ライブコーディング動画(impl Rust: One Billion Row Challenge)が学習に役立った。

よく使うコマンド

コマンド用途
perf stat -r <n> -d -d -d <cmd>詳細イベントを取得し、n回実行の平均±標準偏差まで出す。まず全体像を掴むのに良い
perf recordperf reportプロファイルをperf.dataに記録し、call graph・アセンブリレベルで分析。最も使いやすい
perf stat -a -A -I <msecs> -e <event> <cmd>インターバルごとに全CPUの情報を出力。用途は限定的

注意点

  • perf recordはイベント数が多すぎると問題になる(長時間実行・並列実行)。perf report等で解析できなくなり、ストレージも圧迫する。
  • 対策として、実行中のプロセスへ短時間だけアタッチする: perf record -F 999 -g --call-graph fp -p <PID> -- sleep 30
  • 可視化の補助ツールとしてflamegraphが便利。
  • 今後の課題: MPI環境でのperf等の使い方を実際に動かして確認する。

ビルドオプション(分析しやすさ vs 速度)

分析しやすさと高速化はトレードオフ。用途別(Debug / Profile / Release / Optimize など)に切り替えられるよう環境を整備する。

  • 性能に影響しない: -g(デバッグ情報。無いとソース対応・シンボルが分からず、アセンブリ/ポインタ表示になる)
  • 性能に影響する(最適化を抑制して分析しやすくする):
    • -fno-omit-frame-pointer … call graphが見やすくなる
    • -fno-inline … 関数ごとの性能が見やすくなる
    • -foptimize-sibling-calls(を無効化)… 末尾呼び出しのジャンプ化を抑え、関数ごとの性能が見やすくなる

注意点

  • 富岳前提のツール構成です。2026年大会の実機は未確定なので、利用可能なツールは要確認です(調査ステータス)。
  • ツールはオーバーヘッドが大きいものほど後段で使います。

関連ページ

参考文献