2.7 電磁場解析コード ADVENTURE_Magnetic 性能評価
名古屋大学情報基盤センター 荻野 正雄 2.7.1 はじめに ADVENTURE とは、設 計 用 大 規 模 計 算 力 学 システム開 発 プロジェクト(通 称 ADVENTURE プロジ ェクト)において開 発 されているオープンソース CAE システムである。大 規 模 メッシュを用 いて自 然 物 や 人 工 物 を丸 ごと詳 細 にモデル化 し、多 様 な並 列 分 散 計 算 機 環 境 のもとで固 体 の変 形 や熱 ・流 体 の 流 れ等 の力 学 解 析 から可 視 化 、設 計 最 適 化 までを行 える特 徴 がある。無 料 公 開 されていることもあり、 教 育 ・研 究 から産 業 応 用 まで幅 広 く利 用 されているソフトウェアである。ここでは、電 磁 場 解 析 モジュ ール ADVENTURE_Magnetic の測 定 を行 う。ADVENTURE_Magnetic は、非 線 形 静 磁 場 問 題 、時 間 調 和 渦 電 流 問 題 、さらに非 定 常 渦 電 流 問 題 の有 限 要 素 解 析 機 能 を有 しており、磁 気 ベクトルポテ ンシャルを未 知 数 とする𝐴𝐴法 または𝐴𝐴 − 𝜙𝜙法 の定 式 化 、ベクトル関 数 を要 素 辺 上 で評 価 する Nédélec 要 素 を用 いている。また、非 構 造 格 子 を用 いた有 限 要 素 解 析 では、大 規 模 で疎 な行 列 を係 数 に持 つ連 立 一 次 方 程 式 を解 く必 要 があり、マルチコア・メニーコア上 で高 い並 列 効 率 や演 算 効 率 を出 す ことが困 難 な分 野 とされている。これに対 し、ADVENTURE_Magnetic は領 域 分 割 法 (Domain Decom position Method: DDM)を採 用 することで、分 散 メモリ型 並 列 環 境 において高 い並 列 効 率 が得 られ、 将 来 の計 算 機 においても高 性 能 な計 算 が期 待 できるアプリケーションである。2.7.2 プログラム概要
今 回 は時 間 調 和 渦 電 流 問 題 と非 定 常 渦 電 流 問 題 解 析 を対 象 とする。𝐴𝐴 − 𝜙𝜙法 による定 式 化 は時 間 調 和 渦 電 流 問 題 が、
�𝜈𝜈 rot 𝐴𝐴ℎ, rot 𝐴𝐴ℎ∗� − �𝑖𝑖𝑖𝑖𝑖𝑖 𝐴𝐴ℎ, 𝐴𝐴ℎ∗� + �𝑖𝑖 grad 𝜙𝜙ℎ, 𝐴𝐴ℎ∗� = �𝐽𝐽̃ℎ, 𝐴𝐴ℎ∗� (1a)
�𝑖𝑖 grad 𝜙𝜙ℎ, grad 𝜙𝜙ℎ∗� − �𝑖𝑖𝑖𝑖𝑖𝑖 𝐴𝐴ℎ, grad 𝜙𝜙ℎ∗� = 0 (1b)
非 定 常 渦 電 流 問 題 が、
�𝜈𝜈 rot 𝐴𝐴ℎ𝑛𝑛+1, rot 𝐴𝐴ℎ∗� + �Δ𝑡𝑡𝜎𝜎 𝐴𝐴𝑛𝑛+1ℎ , 𝐴𝐴ℎ∗� + �𝑖𝑖 grad 𝜙𝜙ℎ𝑛𝑛+1, 𝐴𝐴ℎ∗� = �𝐽𝐽̃ℎ𝑛𝑛+1, 𝐴𝐴∗ℎ� + �Δ𝑡𝑡𝜎𝜎 𝐴𝐴ℎ𝑛𝑛, 𝐴𝐴ℎ∗� (2a)
�𝑖𝑖 𝐴𝐴ℎ𝑛𝑛+1, grad 𝜙𝜙ℎ∗� + Δ𝑡𝑡�𝑖𝑖 grad 𝜙𝜙ℎ𝑛𝑛+1, grad 𝜙𝜙ℎ∗� = �𝑖𝑖 𝐴𝐴ℎ𝑛𝑛, grad 𝜙𝜙ℎ∗� (2b)
となる。ここで、𝐴𝐴は磁 気 ベクトルポテンシャル、𝜙𝜙は電 気 スカラーポテンシャル、𝜈𝜈は磁 気 抵 抗 率 、𝐽𝐽は電 流 密 度 、𝑖𝑖は虚 数 単 位 、𝑖𝑖は角 周 波 数 、𝑖𝑖は導 電 率 、𝛥𝛥𝑡𝑡は時 間 刻 み幅 、下 付 き添 え字 ℎは有 限 要 素 近 似 、上 付 き添 え字∗は任 意 の試 験 関 数 、上 付 き添 え字 𝑛𝑛は時 間 ステップを表 す。式 (1)-(2)より、最 終 的 に解 くべき式 は時 間 調 和 渦 電 流 問 題 で複 素 対 称 連 立 一 次 方 程 式 、非 定 常 渦 電 流 問 題 で実 対 称 連 立 一 次 方 程 式 となる。さらに、ADVENTURE_Magnetic における DDM では、解 くべき連 立 一 次 方 程 式 を Schur 補 元 方 程 式 へと変 換 する方 法 を採 用 している。まず、解 くべき式 を次 式 で表 す。 𝐊𝐊𝐊𝐊 = 𝐛𝐛 (3) ここで、係 数 行 列𝐊𝐊は大 規 模 かつ疎 な行 列 となる。次 に、FEM のメッシュを𝑁𝑁個 の部 分 領 域 に分 割 し、 領 域 間 境 界 上 自 由 度 への静 的 縮 約 を行 うことで、次 式 で表 される Schur 補 元 方 程 式 が得 られる。 ∑𝑁𝑁𝑖𝑖=1𝐑𝐑(𝑖𝑖)𝑇𝑇𝐵𝐵 �𝐊𝐊𝐵𝐵𝐵𝐵(𝑖𝑖) − 𝐊𝐊𝐵𝐵𝐵𝐵(𝑖𝑖)𝐊𝐊𝐵𝐵𝐵𝐵(𝑖𝑖)†𝐊𝐊𝐵𝐵𝐵𝐵(𝑖𝑖)� 𝐑𝐑𝐵𝐵(𝑖𝑖)𝐊𝐊𝐵𝐵= ∑𝑁𝑁𝑖𝑖=1𝐑𝐑(𝑖𝑖)𝑇𝑇𝐵𝐵 �𝐛𝐛𝐵𝐵(𝑖𝑖)− 𝐊𝐊(𝑖𝑖)𝐵𝐵𝐵𝐵𝐊𝐊𝐵𝐵𝐵𝐵(𝑖𝑖)−1𝐛𝐛𝐵𝐵(𝑖𝑖)� (4) ここで、𝐑𝐑は全 体 から部 分 領 域 への自 由 度 制 限 行 列 、下 付 き添 え字 𝐵𝐵は領 域 間 境 界 上 自 由 度 に関 する項 、𝐼𝐼は部 分 領 域 内 部 自 由 度 に関 する項 、上 付 き添 え字 (𝑖𝑖)は部 分 領 域 𝑖𝑖に関 する項 、𝑇𝑇は転 置
行 列 、†は一 般 化 逆 行 列 を表 す。この式 は、非 定 常 渦 電 流 問 題 であれば共 役 勾 配 (CG)法 、時 間 調 和 渦 電 流 問 題 は共 役 直 交 共 役 勾 配 (COCG)法 などで解 くことができる。また、必 要 となる係 数 行 列 と修 正 方 向 ベクトルの積 演 算 は第 3 回 WG 資 料 7 ページに示 すように、部 分 領 域 ごとの疎 行 列 ベク トル積 演 算 2 回 と連 立 一 次 方 程 式 解 析 1 回 に置 き換 えられ、部 分 領 域 ごとの連 立 一 次 方 程 式 は不 完 全 コレスキー分 解 前 処 理 付 きの CG 法 または COCG 法 で解 いている。疎 行 列 の格 納 形 式 は CSR を用 いている。 次 に、ADVENTURE_Magnetic のコーディング指 針 について述 べる。本 プログラムは C 言 語 で記 述 されている。前 述 のとおり複 数 の解 析 機 能 があるが、それらは有 限 要 素 法 や領 域 分 割 法 の実 装 で共 通 化 できる箇 所 が多 く、また線 形 代 数 関 係 コードも実 数 と複 素 数 の違 い以 外 はほぼ共 通 化 できる。 そこで、第 3 回 WG 資 料 8 ページに示 すように、共 通 コードとマクロ定 義 の組 み合 わせで全 体 のプロ グラム行 数 を削 減 する工 夫 が行 われている。今 回 はこのようなコードの性 能 評 価 結 果 について紹 介 する。 2.7.3 測定環境 性 能 測 定 には、名 古 屋 大 学 情 報 基 盤 センターの FX10 と FX100、及 び理 化 学 研 究 所 の京 を使 用 した。それぞれの環 境 におけるコンパイラとコンパイラオプションは WG 資 料 に示 す通 りである。 2.7.4 測定結果 まず、ADVENTURE_Magnetic の共 通 化 コードとマクロ定 義 の組 み合 わせによるプログラムに対 する コンパイラの最 適 化 情 報 について述 べる。第 3 回 WG 資 料 8 ページに示 すように、C プログラムのソ ースファイルを#include 指 示 で取 り込 んでおり、定 義 したマクロによって例 えば実 数 向 け・複 素 数 向 け となるように実 装 されている。このようなプログラムを富 士 通 社 製 コンパイラにかけた場 合 、最 適 化 情 報 を含 んだソースリストが表 示 されず、最 適 化 作 業 が行 いづらいという問 題 が生 じた。そこで今 回 は、ソ ースリストを見 るためにインクルードするソースファイルを手 動 で取 り込 んだファイルを別 途 用 意 するこ とで、その問 題 を回 避 した。 次 に、ADVENTURE_Magnetic と同 様 に領 域 分 割 法 を採 用 する構 造 解 析 コード ADVENTURE_So lid の演 算 性 能 について述 べる。第 3 回 WG 資 料 10 ページに示 すように、FX10 においてピーク性 能 比 4%以 上 が得 られていた。これは、3 次 元 構 造 解 析 では節 点 あたり 3 自 由 度 を持 つため、それを利 用 して手 動 ループアンローリングが可 能 であったことが要 因 の 1 つである。しかし、ADVENTURE_Mag netic では要 素 辺 あたり 1 自 由 度 のみのため、同 様 の最 適 化 を行 えない。これにより、ピーク性 能 比 は 構 造 解 析 に比 べて低 下 することが予 想 される。実 測 した結 果 を第 7 回 WG 資 料 に示 す。6 ページに as is コード、コンパイラへの最 適 化 指 示 行 追 加 、一 部 のループ入 れ替 え、realloc 関 数 呼 び出 し削 減 を行 ったコードでの FX100 におけるピーク性 能 比 を示 す。非 定 常 渦 電 流 問 題 でピーク性 能 比 0.7 ~0.9%、時 間 調 和 渦 電 流 問 題 で 1.6%~2.4 程 度 であり、実 数 問 題 における性 能 の低 さが際 立 つ結 果 となった。一 方 、複 素 数 の乗 算 は実 数 に比 べて演 算 強 度 が大 きくなるため、実 行 効 率 が高 くなっ たと言 える。この複 素 数 問 題 の場 合 について、京 、FX10、FX100 で比 較 した結 果 を 7 ページに示 す。 これより、京 や FX10 に比 べて FX100 での実 行 効 率 が大 きく下 がっていることが分 かる。この点 につい て考 察 する。FX100 はノードあたり 32 コアで京 の 8 コアや FX10 の 16 コアに比 べて増 加 しているが、 FX100 では Core Memory Group(CMG)あたり MPI プロセスを 1 つ起 動 させているため、プロセスあ たりのコア数 は FX10 と同 数 であり、8 ページに示 すようにスレッド並 列 効 率 の結 果 も FX10 と同 程 度
であった。そこで SIMD 率 (11 ページ)を調 べたところ、FX10 に比 べて半 分 以 下 になっており、FX100 の 4way SIMD を十 分 に活 かせていないことが分 かった。この点 は今 後 改 善 する必 要 がある。 また、三 吉 委 員 より、9 ページの高 コスト関 数 リストで「__lll_lock_wait」や「__pthread_mutex_unlock_u sercnt」が上 位 にきており、メモリ獲 得 をマスタースレッド以 外 でも頻 繁 に行 っているプログラムであれ ば、「XOS_MMM_L_ARENA_LOCK_TYPE=0」の環 境 変 数 を指 定 するよう助 言 を頂 いた。その結 果 を 次 表 に示 す。表 より、同 環 境 変 数 の指 定 が有 効 であることが分 かった。 表 1 時 間 調 和 渦 電 流 問 題 における実 行 効 率 [%]の比 較 FX100 as is 1.64 +realloc 呼 び出 し削 減 2.43 環 境 変 数 指 定 2.95 2.7.5 まとめ 今 回 の測 定 で得 られた知 見 は以 下 の通 りである。 a) #include 指 示 行 で取 り込 むファイルに対 しては、コンパイラによる最 適 化 情 報 付 きソースリストは出 力 されない。 b) 複 素 数 の疎 行 列 ベクトル積 が主 な計 算 となる領 域 分 割 法 において、京 や FX10 に対 し FX100 で は実 行 効 率 が半 分 以 下 に低 下 した。SIMD 率 も半 分 以 下 に低 下 しており、SIMD 幅 増 加 に対 して複 素 数 四 則 演 算 の効 率 的 な実 装 が必 要 となる。 c) スレッド並 列 処 理 時 にマスタースレッド以 外 でもメモリ確 保 ・解 放 を繰 り返 す領 域 分 割 法 コードで は、”XOS_MMM_L_ARENA_LOCK_TYPE=0”の指 定 が有 効 である。
アプリ性能評価
電磁場解析「ADVENTURE_Magnetic」
荻野正雄 (名古屋大学)
2014年10月1日
第3回SS研ポストペタアプリ性能WG
第3回WG資料 1ADVENTUREシステム
sFlow
Impact
Fluid
Thermal
Forge
Solid
External CAD
CAD
TriPatch
TetMesh
BCtool
Opt
Shape
Auto
Metis
Visual
onWindows
FEMAPtool
Material
iAgent
IO
Bold: Parallel modules
Utilities
Magnetic
今回の対象アプリ
ADVENTURE_Magneticの概要
• 電磁場解析ADVENTURE_Magnetic
– 最新バージョン: 1.5 (2014年3月19日公開)
– 有限要素法
(FEM)による電磁場解析
• 非線形静磁場問題
, 時間調和渦電流問題, 非定常渦電流問題
•
A法またはA‐
法による定式化
• 陰解法
•
Nédélec四面体1次要素 (ベクトル関数を要素辺上で評価)
– 領域分割法
(DDM)
•
Glowinski '84に基づく定式化
• 領域分割数
N >= プロセス数N
p• 計算ノード内は部分領域ループをスレッド並列処理
– 言語
•
C, OpenMP, MPI
第3回WG資料 3定式化
• 静磁場問題
• 時間調和渦電流問題
• 非定常渦電流問題
rot , rot
∗
,
∗
rot , rot
∗,
∗grad
,
∗,
∗grad
, grad
∗, grad
∗0
rot
, rot
∗Δ
,
∗grad
,
∗,
∗Δ
,
∗, grad
∗Δ
grad
, grad
∗, grad
∗: 磁気ベクトルポテンシャル Wb/m , : 電気スカラーポテンシャル V , : 磁気抵抗率 m/H , : 電流密度 A/m , : 虚数単位, : 角周波数 rad/s , : 導電率 S/m 不導体領域では 0 , Δ : 時間刻み幅 s
実数, 対称
実数, 対称
複素数, 対称
AはNédélec四面体1次
φは四面体1次
第3回WG資料 4領域分割法(DDM)
• 線形化された方程式
•
Non‐overlapping領域分割
•
Schur補元方程式
領域内部辺(I) 袖領域辺(B) 辺自由度領域分割
,
,
,
,
ただし,
または部分領域ごとの項を用いて,
Krylov部分空間法
(CG, COCG)で解く
第3回WG資料 5DDMの実装例
• 一般的な実装
(ADVENTUREなど)
–
Schur補行列を陰に構築
• 河合らによる実装
(ADV‐K, '12)
– 部分領域(i)のローカルSchur補行列を陽に構築
• 屋・荻野による実装
(LexADV_TryDDM, '13)
– 全体行列を陽に構築
←
←
行列ベクトル積演算
行列ベクトル積演算
全体行列の成分が不明のため, 評価できる反復法・前処理法が限定される
ほとんどの反復法・前処理法が評価可能で, 新しい前処理の開発コストも低い
←
行列ベクトル積演算
第3回WG資料 6ADVENTUREにおけるコア部分
Schur補行列‐ベクトル積演算
• 部分領域ループ内
– ① 疎行列ベクトル積
– ②
ICCG/ICCOCG法で解く
• ②-1 疎行列ベクトル積
• ②-2 前進後退代入
– ③ 疎行列ベクトル積
1
1
,
←
, ,solve
, , ,,
←
, , , ,←
, ,←
①
②
③
第3回WG資料 7ADVENTURE_Magneticの特徴
• コーディング指針
– 静磁場・渦電流
(2種)でFEMやDDM等のコードを共通化
– 実数・複素数で線形代数関係のコードを共通化
3017 for( i=0 ; i<nf ; i++ ) { 3018 MTYPE dd ;
3019 8 MMULTI( dd, alpha, aq[i] ) ; 3020 8 MPLUS( r[i], r[i], dd ) ; 3021 8 }
コード例(DAXPY)
#define _complex_ #include "common.c" #define _real_ #include "common.c"コンパイラによる最適化情
報付きソースリストが出力さ
れない箇所が多い
共通コード+異なるマクロ
SIMD化されない原因が分
からないことが多い...
第3回WG資料 8数値実験
• テスト問題
– 時間調和/非定常渦電流
– 無限長ソレノイドコイル
→ 長さ0.1m, 中心角20°モデル
–
100万(複素)自由度メッシュ
• 使用計算機
– 名古屋大学Fujitsu PRIMEHPC FX10
12ノード
– コンパイラオプション
"‐Kfast,ocl,restp=arg,simd=2,openmp"
(名大標準) "‐Kfast ‐g ‐Ntl_trt ‐Xa ‐NRtrap"
"‐ipo"を指定しようとしたが,名大標準で"‐g"
があるので無効になってしまった
第3回WG資料 9ADVENTURE_Solidのピーク性能比
(# Nodes) (12) (24) (6) (12) (24) (48) (6) (12)
第9回マルチコアWG時の資料
第3回WG資料 10"AS IS"
コード
のピーク性能比
処理
OpenMP並列
化ループ
Time‐Harmonic
(Complex) [%]
Non‐Steady
(Real) [%]
all
‐
2.17
0.43
SolveDom
内
3.02
0.67
LoopPart
外
3.61
0.72
SolverCG
②式のCG法計算
内
3.55
0.87
mymtMxV
疎行列ベクトル積
内
3.46
1.12
mymtSetBC
境界条件処理
内
8.54
0.20
mymtMakeICC, IC分解
内
0.32
0.27
mymtSetICC, IC前処理
内
3.68
2.01
RealInner, ドット積
内外
0.00
0.45
第3回WG資料 11簡単な改良後のピーク性能比
処理
Time‐Harmonic
(Complex) [%]
Non‐Steady
(Real) [%]
AS IS
TUNED
AS IS
TUNED
all
2.17
2.60
0.43
0.50
SolveDom
3.02
4.09
0.67
0.77
LoopPart
3.61
5.07
0.72
0.83
SolverCG
3.55
3.71
0.87
0.90
mymtMxV
3.46
3.77
1.12
1.19
mymtSetBC
8.54
8.40
0.20
0.21
mymtMakeICC
0.32
0.23
0.27
0.26
mymtSetICC
3.68
3.88
2.01
2.10
RealInner
0.00
0.00
0.45
0.46
第3回WG資料 12精密PA結果: SolveDom, 実行時間内訳
時間調和渦電流(複素数)の実行時間内訳
非定常渦電流(実数)の実行時間内訳
第3回WG資料 13精密PA結果: LoopPart, 実行時間内訳
時間調和渦電流(複素数)の実行時間内訳
非定常渦電流(実数)の実行時間内訳
第3回WG資料 14精密PA結果: SolverCG, 実行時間内訳
時間調和渦電流(複素数)の実行時間内訳
非定常渦電流(実数)の実行時間内訳
第3回WG資料 15精密PA結果: mymtMxV, 実行時間内訳
時間調和渦電流(複素数)の実行時間内訳
非定常渦電流(実数)の実行時間内訳
第3回WG資料 16精密PA結果: mymtSetBC, 実行時間内訳
時間調和渦電流(複素数)の実行時間内訳
非定常渦電流(実数)の実行時間内訳
第3回WG資料 17精密PA結果: mymtMxV (1)
メッシュ・キャッシュエンジン ビジー率
SIMD命令率
第3回WG資料 18精密PA結果: mymtMxV (2)
キャッシュミス率(/ロード・ストア数)
L1Dキャッシュミス内訳(/L1Dキャッシュミス数)
L2キャッシュミス内訳(/L2キャッシュミス数)
第3回WG資料 19精密PA結果: mymtMxV (3)
実行時間内訳 [概略] (/実行時間)
命令内訳 (/有効総命令数)
第3回WG資料 20電磁場解析ADVENTURE_Magneticの
FX100性能評価
荻野正雄 (名古屋大学)
2015年10月8日
第7回SS研ポストペタアプリ性能WG
第7回WG資料 1AdvMagneticにおける実装の特徴
• コーディング指針
– 静磁場・渦電流
(2種)でFEMやDDM等のコードを共通化
– 実数・複素数で線形代数関係のコードを共通化
#define __ADVMAG_MATRIX_SYSTEM_COMPLEX__ #include "mtype.h" #include "hddm_solver.c"プログラム実体である
hddm_solver.cをincldue文で取
り込んでおり, それらはコンパ
イラによる最適化情報付き
ソースリストが出力されない
マクロ定義+共通コード
hddm_solver_rs.c
#define __ADVMAG_MATRIX_SYSTEM_REAL__ #include "mtype.h" #include "hddm_solver.c"hddm_solver_cs.c
必要に応じて, 展開してコンパイ
ルしてみて最適化情報を確認
第7回WG資料 2四則演算のコーディング方法
•
AdvMagneticの実装
– 実数
• 関数形式マクロ
– 複素数
• 構造体(AOS) + 関数
• 構造体(AOS) + 関数形式マクロ
•
_Complex型
for( j=ai[i] ; j<ii ; j++ ) { MTYPE ddd;
MMULTI( ddd, vij[j], vec[aij[j]] ); MPLUS( x[i], x[i], ddd );
MMULTI( ddd, vij[j], vec[i] ); MPLUS( x[aij[j]], x[aij[j]], ddd ); }
j
ai i to ii
x i
vij j
vec aij j
x aij j
vij j
vec i
v for( j=ai[i] ; j<ii ; j++ ) { v MTYPE ddd;
6v MMULTI( ddd, vij[j], vec[aij[j]] ); 6v MPLUS( x[i], x[i], ddd );
6v MMULTI( ddd, vij[j], vec[i] ); 6v MPLUS( x[aij[j]], x[aij[j]], ddd ); 6v }
v for( j=ai[i] ; j<ii ; j++ ) { v MTYPE ddd;
2v MMULTI( ddd, vij[j], vec[aij[j]] ); 2v MPLUS( x[i], x[i], ddd );
2v MMULTI( ddd, vij[j], vec[i] ); 2v MPLUS( x[aij[j]], x[aij[j]], ddd ); 2v } #pragma loop norecurrenceを指定する(第6回富士通報 告より)ことで, 実数/複素数ともにSIMD化が適用された第7回WG資料 3