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の勉強会でチームが共有したスケーリング分析の基礎をまとめたものです。 担当: 田中。

これは何か

スケーリング分析とは、ノード数・コア数・MPIランク数・OpenMPスレッド数などの計算資源を変えたときに、実行時間や並列効率がどう変化するかを測り、並列化の限界やボトルネックを特定する分析です。

CPU計算を単純に速くする方法として「CPUの数を増やす」「クロック周波数を上げる」が考えられますが、資源を増やした分だけ速くなるとは限りません。それを確かめるのがスケーリング分析です。

基本概念

用語説明
strong scaling問題サイズを固定し、ノード/コア数を増やしてどれだけ速くなるかを測る
weak scaling1ノードあたりの問題サイズを固定し、資源と問題サイズを同時に増やす
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の有無

改善の進め方

実行時間だけを見るのではなく、計算資源を変えながら対照実験を行い、プロファイリングで原因を特定します。

  1. 入力を固定し、node/rank/thread数を変えて測る(strong scaling)。
  2. speedupと並列効率を出し、頭打ちになる点を探す。
  3. その点でプロファイルを取り、逐次部分・通信・load imbalanceのどれが原因か切り分ける。
  4. 原因に応じて対策(分割手法変更、rank数調整、通信削減など)を1つずつ試す。

代表的なプロファイリングツールはperfです。詳しくはプロファイリングツール実践ガイドを参照してください。

実験ログテンプレート

experiment_id:
date:
case:
nodes:
ranks:
threads:
wall_time:
speedup_vs_1node:
parallel_efficiency:
rank_time_imbalance:
bottleneck_hypothesis:
notes:

関連ページ

参考文献