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:チューニングと並列化をしたコードに より、多次元計算を行う。
© Copyright 2024 ExpyDoc