![Page 1: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/1.jpg)
OpenFOAMを用いた超大規模計算モデル作成とその性能の評価
清水建設 株式会社
PHAM VAN PHUC
内山 学
![Page 2: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/2.jpg)
「京」でのOpenFOAMに関する取組み
◼ 第1回 OpenFOAMワークショップ (2013)
◼ コード移植、10億格子計算の壁・解決策(プリ・ポスト)
◼ 第2回 OpenFOAMワークショップ(2014)
◼ 1万並列計算の壁・解決策(MPIプラットフォーム)
◼ 第3回 OpenFOAMワークショップ (2015)
◼ 超並列・超大規模解析(10万並列、 1千億格子)
◼ 第4回 OpenFOAMワークショップ(2016)
◼ 超大規模ポスト処理(1千億格子)
コードの課題・改良策
改良コードの超大規模解析・ポスト処理
超大規模プリ処理+最新改良・性能分析
◼ 第2回CAEワークショップ(本日)◼ 超大規模計算モデル作成とその性能の評価
![Page 3: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/3.jpg)
内容
◼ 超大規模のプリ処理 (フック)
◼ メッシュの作り方
◼ コードの最新改良と性能評価 (内山)
◼ OpenFOAMのthread 並列化
3
![Page 4: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/4.jpg)
超大規模のプリ処理
4
![Page 5: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/5.jpg)
プリ・ポスト処理
◼ シリアル処理の限界
◼ データの分割・結合には時間・手間は非常にかかる
数億格子規模でほぼ限界
モデル作成(プリ処理)
シミュレーション
出力・可視化
Computational domain in a single processor
Computational domain, results in a single processor
×
10億格子データ 1TBメモリの利用
京のプリ・ポスト処理PC: 1TB
初期化
領域分割
データ結合ポスト処理
×
![Page 6: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/6.jpg)
プリ・ポスト処理
◼ 分散処理の重要性
モデルの作成(プリ)
シミュレーション
データ出力・可視化
初期化・領域分割(分散)
・ロードバランス
ポスト処理
画像処理
データ処理等
第1回 OpenFOAMワークショップ (2013)
本日、紹介
第4回 OpenFOAMワークショップ(2016)
![Page 7: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/7.jpg)
大規模プリ処理手法の分類
1.細分化の手法◼表面の比較的大きいモデル
(粗い格子で計算格子を作成できる)
2.分散処理の手法◼独立性のあるモデル(小規模の複数ケースの計算)
3.マルチカラー処理の手法◼少ない計算リソースのある場合
7
![Page 8: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/8.jpg)
1.細分化の手法 手法のコンセプト
1)数千万の粗い格子でのメッシュの作成(blockMesh/SnappyHexMesh/市販メッシュ作成ソフト)
2)領域分割(decomposePar)
3)計算格子の細分化(refineHexMesh/refineMesh)
対象計算モデル
processor0 processor1 … processorN
細分化 細分化 細分化 細分化
・ロードバランス
大規模計算モデル(数十~数百億格子)
![Page 9: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/9.jpg)
1.細分化の手法 風洞丸ごとの再現計算事例
![Page 10: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/10.jpg)
1) 1千万格子の作成 (市販メッシャー)
1.細分化の手法
4)64億格子の計算モデル
3)計算格子の細分化(refineHexMesh/refineMesh)
風洞丸ごとの再現計算事例(イメージ図)
2)領域分割(decomposePar: ロードバランス)
![Page 11: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/11.jpg)
1.細分化の手法
大規模計算(64億格子)
風洞丸ごとの再現計算事例
![Page 12: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/12.jpg)
1.細分化の手法
格子A: 1.4億格子 格子 B: 11億格子
Δ=0.5mm=D/170 Δ=0.25mm=D/340
D D
3)計算格子の細分化
30m
2.5
m SpiresRoughness Blocks
Target Building U=15m/s
No-slip wall
Outlet
boundary
複雑形状建物の計算事例
1) SnappyHexMeshでのメッシュ作成
2) 領域分割(6144領域:ロードバランス)
![Page 13: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/13.jpg)
1.細分化の手法
30m
2.5
m SpiresRoughness Blocks
Target Building U=15m/s
No-slip wall
Outlet
boundary
風圧
速度テンソルの第2不変量の等値面(Q=300,000)
複雑形状建物の計算事例
![Page 14: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/14.jpg)
2.分散処理の手法 手法のコンセプト
(独立性のある)対象計算モデル~ 同様の小規模の複数ケースの計算
![Page 15: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/15.jpg)
風
ターンテーブル
風
2.分散処理の手法36風向の風洞実験の再現独立性のある計算モデル
![Page 16: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/16.jpg)
2.分散処理の手法
総格子数 : 1.4億 x 36風向 ~ 50億格子
「京」コンピュータ
並列実行 (27,648CPUの利用)
θ=0° θ=10° θ=20° θ=30° θ=40° θ=50° θ=60° θ=70° θ=80°
θ=90° θ=100° θ=110° θ=120° θ=130° θ=140° θ=150° θ=160° θ=170°
θ=180° θ=190° θ=200° θ=210° θ=220° θ=230° θ=240° θ=250° θ=260°
θ=270° θ=280° θ=290° θ=300° θ=310° θ=320° θ=330° θ=340° θ=350°
36風向ケースの計算格子
36風向の風洞実験の再現独立性のある計算モデル
![Page 17: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/17.jpg)
2.分散処理の手法
36風向ケースの並列実行
θ=0°
θ=80°
θ=90°
θ=170°
θ=180°
θ=260°
θ=270°
θ=350°
「京」コンピュータ「京」コンピュータ
並列実行 (27,648CPUの利用)
36風向の風洞実験の再現独立性のある計算モデル
![Page 18: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/18.jpg)
2.分散処理の手法
風圧分布の算出
θ=0° θ=10° θ=20° θ=30° θ=40° θ=50° θ=60° θ=70° θ=80°
θ=90° θ=100° θ=110° θ=120° θ=130° θ=140° θ=150° θ=160° θ=170°
θ=180° θ=190° θ=200° θ=210° θ=220° θ=230° θ=240° θ=250° θ=260°
θ=270° θ=280° θ=290° θ=300° θ=310° θ=320° θ=330° θ=340° θ=350°
「京」コンピュータ「京」コンピュータ
36風向ケースの並列実行
36風向の風洞実験の再現独立性のある計算モデル
並列実行 (27,648CPUの利用)
![Page 19: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/19.jpg)
2.分散処理の手法
負側ピーク外圧係数正側ピーク外圧係数
Cal.Exp.
実験結果と同等な精度を確認全風向におけるピーク外圧係数
「京」コンピュータ「京」コンピュータ
並列実行 (27,648CPUの利用)
36風向の風洞実験の再現独立性のある計算モデル
![Page 20: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/20.jpg)
3.マルチカラー処理の手法
※9並列処理、Red-Blackの2色処理法
少ない計算リソースのある場合の対応 (既存ツールの改良)
手法のコンセプト
![Page 21: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/21.jpg)
3.マルチカラー処理の手法
8×8=64領域4色で色付け(黒、赤、青、緑)
4ステップで、順次に処理
独立でメッシュを作成
空いている少ない計算リソースの利用
全領域のメッシュ作成完了
少ない計算リソースのある場合の対応 (既存ツールの改良)
手法のコンセプト
![Page 22: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/22.jpg)
3.マルチカラー処理の手法
22
1km1km
計算格子の作成
![Page 23: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/23.jpg)
30km
2km
AIJ(Ⅰ)の乱れの無い勾配流 ( U10=36m/s)
3.マルチカラー処理の手法
Slip
Slip
計算事例
![Page 24: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/24.jpg)
3.マルチカラー処理の手法
24
垂直+回転運動
計算格子の作成
Tacoma Narrows Bridge
![Page 25: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/25.jpg)
3.マルチカラー処理の手法
25
計算格子の作成
![Page 26: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/26.jpg)
内容
◼ 超大規模のプリ処理 (フック)
◼ メッシュの作り方
◼ コードの最新改良と性能評価 (内山)
◼ OpenFOAMのthread 並列化
26
Xeon-phi上での非構造格子のthread 並列化
![Page 27: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/27.jpg)
OpenFOAM本体の高速化とスレッド並列化
◼ 入り組んだC++コードの展開とチューニング(2倍高速化)
◼ 連立方程式解法の変更,改良
・流速:BiCG → Additive Schwartzに変更(演算量1/2)
・圧力:AMG-CG → CG法のアルゴリズム改変(安定化)
・独自のblock multicolorでILU smootherをスレッド並列化*
◼ 連立方程式以外の部分も細部まで並列化
・loopタイプは数種類しかない ⇒ 数種類の方法を考えれば良い
・行列イメージで,バンド幅の狭い問題と広い問題で手法を開発*
・各境界領域内も再帰参照しないようにリオーダリング*
27
本報告ではthread並列化まで
⇒ストロングスケールで40倍以上の性能(64スレッド)
対象コード:OpenFOAM-1606+ (pisoFoam)
使用する計算機:Oakforest-PACS(東大・筑波)
![Page 28: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/28.jpg)
格子のオーダリング(連立方程式解法)
28
例:グループ数:(32, 4, 2)
格子の99%以上がlevel=0, 1に含まれる
係数行列の非零項の分布イメージ
連成項
AMG法のCoarse Gridにも適用
連成項
METISでグラフ分割連成項を後ろに回す
対角ブロック内と連成項は独立した番号付け
連立方程式解法前後で並び替えを行う
![Page 29: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/29.jpg)
良く現れるループの並列化良く現れるループの形:faceの数で回るループ
29
バンド幅が狭い場合
for(label fi=0; fi<nFaces; fi++) {label i=owner[fi], j=neighbor[fi];scalar tmp = (some computation);a[i] += tmp;a[j] += tmp;
}
バンド幅が広い場合
行列イメージだと,
非対角項に関する計算を行って,
非対角項の位置 iと jに対応する2つの項に加算
level0
level1
level2
work[ ] a[ ]
非零項の配置は対称で、Compressed Row Storage(上三角)
![Page 30: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/30.jpg)
良く現れるループの並列化境界領域
30
for(label ipt=0; ipt<nPatches; ipt++) {const LabelUList& faceCells = boundary[ipt].faceCells();
for(label fi=0; fi<patchSizes[ipt]; fi++) {label i=faceCells[ipt][fi];scalar tmp = (some computation);a[i] += tmp;
}
}
for(label ipt=0; ipt<nPatches; ipt++) {
const LabelUList& faceCells = boundary[ipt].faceCells();
const label fi1 = cp1[ipt].fi1;
const label * __restrict__ old1 = cp1[ipt].old1;
#pragma omp for
#pragma ivdep
for (label ffi=0; ffi<fi1; ffi++) {
label fi = old1[ffi];
label i = faceCells[fi];
scalar tmp = (some computation);
a[i] += tmp;
}
#pragma omp single
for (label ffi=fi1; ffi<patchSizes[ipt]; ffi++) {
label fi = old1[ffi];
label i = faceCells[fi];
scalar tmp = (some computation);
a[i] += tmp;
}
}
再帰参照しない
前loopの残り並び替えて,再帰参照されるものを後ろに回せば良い
再帰参照される
境界の数
faceの数
![Page 31: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/31.jpg)
計算例:高層ビル:バンド幅狭い
圧力の修正回数=331
風速36m/s
t=5.0-6.0 s, Δt=0.001 s
1
![Page 32: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/32.jpg)
計算例:高層ビル:バンド幅狭い
32
計算時間(5 s – 6 s) 高速化率
others(連立方程式解法以外)が 40%程度
0
1 104
2 104
3 104
4 104
5 104
6 104
7 104
8 104
1 2 4 6 8 12 16 24 32 48 64
AdditiveSchwartzGAMG_CGothers
elapsed time (s)
threads
0
10
20
30
40
50
60
70
0 10 20 30 40 50 60 70
idealallAdditiveSchwartzGAMG_CGothers
高速
化率
threads
45倍
連立方程式解法だけ並列化や高速化をしても駄目
1.6 s/step
Xeon-phi 7250 @ 1.4GHzMCDRAM 16GBをcacheとして使用
バンド幅が狭い場合:436ブロック(最少ブロックサイズ=3000)
![Page 33: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/33.jpg)
計算例:motorBike:バンド幅広い
. 33
風速20m/s
t=0.2-0.25 s, Δt=0.00005 s
2
![Page 34: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/34.jpg)
計算例:motorBike :バンド幅広い
34
移植直後の高速化率 改良後の高速化率
others(連立方程式解法以外)が 40%程度
連立方程式解法だけ並列化や高速化しても駄目
0
10
20
30
40
50
60
70
0 10 20 30 40 50 60 70
idealallAdditiveSchwartzGAMG_CGothers
高速化率
threads
40倍
0.8 s/step
Xeon-phi 7250 @ 1.4GHzMCDRAM 16GBをcacheとして使用
0
10
20
30
40
50
60
70
0 10 20 30 40 50 60 70
idealallAdditiveSchwartzGAMG_CGothers
高速化率
threads
変化無し
バンド幅が狭い場合の方法:117ブロックしかない バンド幅が広い場合の方法:各256グループ(level=0,1)
![Page 35: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/35.jpg)
Xeon(Broadwell)で計算してみたが…
35
高速化率:高層建物 高速化率:motorBike
Xeon E5-2687W v4 @ 3.00GHz2 CPU, 12 core/CPU, 30MB Cache
0
2
4
6
8
10
12
14
16
0 2 4 6 8 10 12 14 16
idealallAdditiveSchwartzGAMG_CGothers
高速化率
threads
4.9倍
スレッドを増やしても性能が上がりにくい・メモリー帯域が足りない?・cache memoryが競合?
0
2
4
6
8
10
12
14
16
0 2 4 6 8 10 12 14 16
idealallAdditiveSchwartzGAMG_CGothers
高速化率
threads
5.3倍
![Page 36: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価](https://reader035.vdocuments.pub/reader035/viewer/2022071501/612104160531d371643df5f6/html5/thumbnails/36.jpg)
結語
■Oakforest-PACS上でpisoFoamのthread並列化を行った
■連立方程式解法以外の部分も細部に渡ってthread並列化
■細部まで並列化し,ストロングスケールで40倍以上の性能
課題
■SIMD化
36