スケーリング分析
このページは、2026-06-05の勉強会でチームが共有したスケーリング分析の基礎をまとめたものです。 担当: 田中。
これは何か
スケーリング分析とは、ノード数・コア数・MPIランク数・OpenMPスレッド数などの計算資源を変えたときに、実行時間や並列効率がどう変化するかを測り、並列化の限界やボトルネックを特定する分析です。
CPU計算を単純に速くする方法として「CPUの数を増やす」「クロック周波数を上げる」が考えられますが、資源を増やした分だけ速くなるとは限りません。それを確かめるのがスケーリング分析です。
基本概念
| 用語 | 説明 |
|---|---|
| strong scaling | 問題サイズを固定し、ノード/コア数を増やしてどれだけ速くなるかを測る |
| weak scaling | 1ノードあたりの問題サイズを固定し、資源と問題サイズを同時に増やす |
| parallel efficiency | 理想的な速度向上に対して、実際にどれだけ効率が出ているか |
理想的には、CPU/nodeを 1, 2, 4, … と増やすと実行時間が 1/1, 1/2, 1/4, … と減るはずですが、実際にはきれいに比例しません。
なぜ理想どおりにならないか
| 要因 | 内容 |
|---|---|
| 逐次部分(アムダールの法則) | 並列化できない処理が残ると、資源を増やしても頭打ちになる |
| MPI通信・collective・同期 | 資源を増やすほど通信・同期のコストが増える |
| load imbalance(負荷の偏り) | rank間で計算量が偏ると、速いrankが遅いrankを待つ |
特にload imbalanceは重要です。一部のrankが先に終わっても、最も遅いrankが終わるまで全体は終わりません。追加したnodeの効果が「待ち」で失われます。
大会との関係
- 「ノードを増やせば勝てる」ではなく、どこまで増やすと効率が落ちるかを把握することが重要です。
- 領域分割の手法(
scotchなど)やrank数の調整で、スケーリングが改善することがあります(領域分割)。
最初に見るべき指標
| 観点 | 見るもの | なぜ重要か |
|---|---|---|
| 速度向上 | 1/2/4/8ノードのspeedupカーブ | 理想直線からどれだけ離れるか |
| 並列効率 | parallel efficiency | どの規模で効率が落ちるか |
| 負荷の偏り | rankごとの計算時間のばらつき(CV) | load imbalanceの有無 |
改善の進め方
実行時間だけを見るのではなく、計算資源を変えながら対照実験を行い、プロファイリングで原因を特定します。
- 入力を固定し、node/rank/thread数を変えて測る(strong scaling)。
- speedupと並列効率を出し、頭打ちになる点を探す。
- その点でプロファイルを取り、逐次部分・通信・load imbalanceのどれが原因か切り分ける。
- 原因に応じて対策(分割手法変更、rank数調整、通信削減など)を1つずつ試す。
代表的なプロファイリングツールはperfです。詳しくはプロファイリングツール実践ガイドを参照してください。
実験ログテンプレート
experiment_id:
date:
case:
nodes:
ranks:
threads:
wall_time:
speedup_vs_1node:
parallel_efficiency:
rank_time_imbalance:
bottleneck_hypothesis:
notes: