ハイパースレッディングの並列化への影響
DESCRIPTION
8000コア規模の計算実行時に、ハイパースレッディングが並列化効率に与える影響を調べた。TRANSCRIPT
1/13
ハイパースレッディングの 並列化効率への影響
東京大学物性研究所 渡辺宙志
2/13
400万粒子/ノードに固定し、ノード数を増やすウィークスケーリング 1000ステップ計算するのにかかった時間をプロット @物性研 SGI Altix ICE 8400EX
観測事実 (1/2)
オーバーヘッド
3/13 観測事実 (2/2)
(1) 粒度が疎、つまり計算時間に比して通信時間が相当短いはずなのに、ウィークスケーリングで高並列時に性能が劣化する
(2) 力の計算時間を測定してみると、通信を含まないはずなのにプロセスごとに時間がばらついている
(3) 時間のばらつきはプロセス数を増やすと大きくなり、全体同期により性能劣化を招いている
(4) まったく同じ計算をしても、遅いプロセスは毎回異なる
システムノイズ(OSジッタ)だろうか? しかしOSジッタにしては影響が大きすぎる
4/13 調べたいこと
(1) プロセスの実行時間の揺らぎを精密に調べる (2) ハイパースレッディング(HT) の並列性能への影響を調べる
5/13
HTなし HTあり
HTなしでは、物理コアひとつにMPIプロセス一つをバインドする。 HTありでは、物理コアが二つの論理コアになるが、 物理コア一つにMPIプロセスを一つバインド。
計算条件 (1/2)
HTの有無以外の計算条件は変えない
6/13 計算条件 (2/2)
東京大学物性研究所 システムB SGI Altix ICE 8400EX CPU: Intel Xeon X5570 2.93GHz 4コア/CPU、2CPU/ノード
計算資源:
計算条件: カットオフ2.5σのLennard-Jones粒子系 時間ステップ 0.001、数密度: 0.5 粒子数: 50万粒子/コア、 400万粒子/ノード Flat-MPIによる領域分割 計算コード:http://mdacp.sourceforge.net/ 測定日:2011年6月
※ HT無効の計算は1ノードから1024ノードまで数点を、 HTを有効にした計算は、1024ノード、8192コアの一点のみを計算
7/13
粒子をメッシュに登録
隣接粒子リストを作成
力の計算
位置と速度を更新
リストはまだ有効か?
No
Yes
領域からはみ出した粒子の処理
粒子の位置情報を更新
MPI_Sendrecv
MPI_Sendrecv
MPI_Allreduce
計算アルゴリズム
※通信は全てブロッキング通信
8/13
粒子をメッシュに登録
隣接粒子リストを作成
力の計算
位置と速度を更新
リストはまだ有効か?
No
Yes
領域からはみ出した粒子の処理
粒子の位置情報を更新
測定する場所
計算全体: このループを 1000ステップ積算
力の計算: ここだけをステップごと、 プロセスごとに計測
※計算全体は並列化効率の定義のため、力の計算は揺らぎの測定のために調べる
9/13 Hyper-Threadingの影響
HTを有効にするだけで並列化効率が大きく改善(66%→90%)
10/13
あるステップにおける、プロセスごとの「力の計算」にかかった時間の累積確率分布
ほとんどのプロセスの揺らぎはガウス分布に従うが、飛び抜けて遅い連中がいる → システムからのノイズ?
計算時間の揺らぎ (1/3)
11/13
誤差関数でフィットしてみる
特徴的な時間「τ」 ガウス分布の標準偏差に相当
HTなし:平均時間 143.785 [ms] 標準偏差 0.29 [ms] HTあり:平均時間 143.940 [ms] 標準偏差 0.36 [ms]
一番遅かったプロセス: HTなし: 221.543 [ms] HTあり: 164.009 [ms]
平均からのずれが256σ
統計情報からはHTなしの方が優れている(平均も揺らぎも小さい)が・・・
一番遅いプロセスの実行時間がHTにより大きく改善された
計算時間の揺らぎ (2/3)
12/13 計算時間の揺らぎ (3/3)
各ステップでもっとも計算が遅かったランク番号 (HTあり)
ロードインバランスのせいではない (同じペアリストを使い回す間は粒子ペア数が固定であるにも関わらず、毎ステップ一番遅いプロセスが違うから) 何か構造がありそう。ラウンドロビンで何かやってる?
13/13 まとめのようなもの
(1) Hyper-Threading Technologyを有効にすることで 並列化効率が大きく向上→HTによるスムーズなスレッドの切り替えが要因?
(2) 揺らぐ時間は80ミリ秒といったオーダー → OSジッタとしては大きすぎる (3) 通信を含まないはずの領域を測定しているのに、計算時間が大きく揺らぐ
→通信の後処理が割り込んでいる?