openfoamを用いた 超大規模計算モデル作成とその性能の評価...第2回cae...

36
OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価 清水建設 株式会社 PHAM VAN PHUC 内山

Upload: others

Post on 26-Mar-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

OpenFOAMを用いた超大規模計算モデル作成とその性能の評価

清水建設 株式会社

PHAM VAN PHUC

内山 学

Page 2: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

「京」での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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

内容

◼ 超大規模のプリ処理 (フック)

◼ メッシュの作り方

◼ コードの最新改良と性能評価 (内山)

◼ OpenFOAMのthread 並列化

3

Page 4: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

超大規模のプリ処理

4

Page 5: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

プリ・ポスト処理

◼ シリアル処理の限界

◼ データの分割・結合には時間・手間は非常にかかる

数億格子規模でほぼ限界

モデル作成(プリ処理)

シミュレーション

出力・可視化

Computational domain in a single processor

Computational domain, results in a single processor

×

10億格子データ 1TBメモリの利用

京のプリ・ポスト処理PC: 1TB

初期化

領域分割

データ結合ポスト処理

×

Page 6: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

プリ・ポスト処理

◼ 分散処理の重要性

モデルの作成(プリ)

シミュレーション

データ出力・可視化

初期化・領域分割(分散)

・ロードバランス

ポスト処理

画像処理

データ処理等

第1回 OpenFOAMワークショップ (2013)

本日、紹介

第4回 OpenFOAMワークショップ(2016)

Page 7: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

大規模プリ処理手法の分類

1.細分化の手法◼表面の比較的大きいモデル

(粗い格子で計算格子を作成できる)

2.分散処理の手法◼独立性のあるモデル(小規模の複数ケースの計算)

3.マルチカラー処理の手法◼少ない計算リソースのある場合

7

Page 8: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

1.細分化の手法 手法のコンセプト

1)数千万の粗い格子でのメッシュの作成(blockMesh/SnappyHexMesh/市販メッシュ作成ソフト)

2)領域分割(decomposePar)

3)計算格子の細分化(refineHexMesh/refineMesh)

対象計算モデル

processor0 processor1 … processorN

細分化 細分化 細分化 細分化

・ロードバランス

大規模計算モデル(数十~数百億格子)

Page 9: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

1.細分化の手法 風洞丸ごとの再現計算事例

Page 10: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

1) 1千万格子の作成 (市販メッシャー)

1.細分化の手法

4)64億格子の計算モデル

3)計算格子の細分化(refineHexMesh/refineMesh)

風洞丸ごとの再現計算事例(イメージ図)

2)領域分割(decomposePar: ロードバランス)

Page 11: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

1.細分化の手法

大規模計算(64億格子)

風洞丸ごとの再現計算事例

Page 12: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

2.分散処理の手法 手法のコンセプト

(独立性のある)対象計算モデル~ 同様の小規模の複数ケースの計算

Page 15: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

ターンテーブル

2.分散処理の手法36風向の風洞実験の再現独立性のある計算モデル

Page 16: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

2.分散処理の手法

36風向ケースの並列実行

θ=0°

θ=80°

θ=90°

θ=170°

θ=180°

θ=260°

θ=270°

θ=350°

「京」コンピュータ「京」コンピュータ

並列実行 (27,648CPUの利用)

36風向の風洞実験の再現独立性のある計算モデル

Page 18: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

2.分散処理の手法

負側ピーク外圧係数正側ピーク外圧係数

Cal.Exp.

実験結果と同等な精度を確認全風向におけるピーク外圧係数

「京」コンピュータ「京」コンピュータ

並列実行 (27,648CPUの利用)

36風向の風洞実験の再現独立性のある計算モデル

Page 20: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

3.マルチカラー処理の手法

※9並列処理、Red-Blackの2色処理法

少ない計算リソースのある場合の対応 (既存ツールの改良)

手法のコンセプト

Page 21: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

3.マルチカラー処理の手法

8×8=64領域4色で色付け(黒、赤、青、緑)

4ステップで、順次に処理

独立でメッシュを作成

空いている少ない計算リソースの利用

全領域のメッシュ作成完了

少ない計算リソースのある場合の対応 (既存ツールの改良)

手法のコンセプト

Page 22: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

3.マルチカラー処理の手法

22

1km1km

計算格子の作成

Page 23: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

30km

2km

AIJ(Ⅰ)の乱れの無い勾配流 ( U10=36m/s)

3.マルチカラー処理の手法

Slip

Slip

計算事例

Page 24: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

3.マルチカラー処理の手法

24

垂直+回転運動

計算格子の作成

Tacoma Narrows Bridge

Page 25: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

3.マルチカラー処理の手法

25

計算格子の作成

Page 26: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

内容

◼ 超大規模のプリ処理 (フック)

◼ メッシュの作り方

◼ コードの最新改良と性能評価 (内山)

◼ OpenFOAMのthread 並列化

26

Xeon-phi上での非構造格子のthread 並列化

Page 27: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

格子のオーダリング(連立方程式解法)

28

例:グループ数:(32, 4, 2)

格子の99%以上がlevel=0, 1に含まれる

係数行列の非零項の分布イメージ

連成項

AMG法のCoarse Gridにも適用

連成項

METISでグラフ分割連成項を後ろに回す

対角ブロック内と連成項は独立した番号付け

連立方程式解法前後で並び替えを行う

Page 29: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

良く現れるループの並列化良く現れるループの形: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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

良く現れるループの並列化境界領域

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

計算例:高層ビル:バンド幅狭い

圧力の修正回数=331

風速36m/s

t=5.0-6.0 s, Δt=0.001 s

1

Page 32: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

計算例:高層ビル:バンド幅狭い

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

計算例:motorBike:バンド幅広い

. 33

風速20m/s

t=0.2-0.25 s, Δt=0.00005 s

2

Page 34: OpenFOAMを用いた 超大規模計算モデル作成とその性能の評価...第2回CAE ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

計算例: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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

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 ワークショップ(本日) 超大規模計算モデル作成とその性能の評価

結語

■Oakforest-PACS上でpisoFoamのthread並列化を行った

■連立方程式解法以外の部分も細部に渡ってthread並列化

■細部まで並列化し,ストロングスケールで40倍以上の性能

課題

■SIMD化

36