OPENMP火星電離圏多流体MHDコードの高速化

OpenMPとスカラチューニングによる
火星電離圏多流体MHDコードの高速化
2015年8月7日
名古屋大学 D2 小山響平
開発中の多流体MHDについて
• イオン種:4種類(H+, O+, O2+, CO2+ )
• 中性粒種:3種類(H,O,CO2)
• イオンは粒子種ごとに連続の式、運動方程式を計
算する。中性粒子の密度分布は時間変化しない
• 中性粒子から太陽紫外線による光電離、電荷交
換反応によりイオン種を生成する。
• イオン-イオン、イオン-中性、電子-中性、衝突によ
りイオン流体の運動量が交換される
計算結果 (重い順に6位)
重い!
% cumulative self
time seconds seconds calls name
22.92 7.62
22.11 14.97
12.44 19.11
9.93 22.41
6.11 24.44
6.08 26.46
7.62
7.35
4.14
3.30
2.03
2.02
1000
12000
13001
6000
6000
4011
__p__fluid_source
__p__fluid_iflux
__p__fluid_etc_v2u
__p__fluid_nflux
__p__fluid_vh
__p__fluid_etc_u2v
Total : 33.24s
方程式右辺のsourceと左辺のifluxが特に重い
スカラチューニング後の計算結果
% cumulative
time seconds
24.48 2.24
14.65 3.58
14.65 4.92
6.67 5.53
6.23 6.10
6.01 6.65
self
seconds calls name
2.24 12000 __p__fluid_iflux
1.34 13001 __p__fluid_etc_v2u
1.34 1000 __p__fluid_source
0.61 6000
__p__fluid_vh
0.57 12000 __p__fluid_etc_rot
0.55 6000
__p__fluid_sum_nflux
Total : 9.15s
まとめ:チューニングと並列化
• 各サブルーチンをスカラチューニングした
if文をif構文を使わない形に書き換え
複数回用いられる変数の割り算には、逆数の新
しい変数を定義し、掛け算の形で書き直した
例: a = b / c → c’ = 1/c ; a = b*c’
• コンパイラオプションの追加と比較
→gfortranのオプション「-O3」で4割ほど高速化
• Open MPを用いたdoループの並列化
→並列化したサブルーチンは1/(コア数)にほぼ
比例して速くなった。ただし、最終日に並列化が利
かなくなった(サボタージュ?)
• Future Work:チューニングと並列化をしたコードに
より、多次元計算を行う。