2020 年 8 月 31 日 (WEB 公開版: 2020 年 9 月 11 日)

第 1 回 スーパーコンピュータ「不老」ユーザ会「名古屋大学スーパーコンピュータ不老の OpenFOAM ベンチマークテスト」

今野 雅 / IMANO Masashi(株式会社 OCAEL・東京大学情報基盤センター客員研究員)

1

はじめに

• 学際大規模情報基盤共同利用・共同研究拠点 (JHPCN) の 2020 年度一般共同研究課題「機械学習を用いた風環境予測精度の向上と防災技術への応用」(課題代表者:高木洋平氏)
での共同研究では，以下の計算機資源が供与されている．

– 名古屋大学情報基盤センター 不老– 東京大学情報基盤センター Oakbridge-CX (以下，OBCX)• 本課題では，建物設計時の支援となるよう，機械学習を用いて，建物表面のピーク風圧や歩行者高さでの風環境解析を短時間で予測するための基礎検討を行なっている．

• この機械学習を行うには，多数の建物形状に対して，教師データとなる非定常 LES 解析(格子数 3〜24M 程度) と，入力データとなる定常 RAS 解析 (格子数 1〜3M 程度) を行う必要がある．

• 効率的な計算機資源の利用のため，不老 Type I，Type II，Cloud と OBCX で OpenFOAM
ベンチマークテストを行い，多数の LES，RAS 解析を効率的に行うことができるシステムや計算条件を検討した．

1

2

オープン CAE 学会チャネル流ベンチマーク

解析条件
110
Lx × Ly × Lz = 一定の圧力勾配
5π × 2 × 2π
主流方向Reτ = uτ δ/ μ 周期境界= 110 [-]
主流・スパン方向
ここでソルバ
pimpleFoam
Lx , Ly , Lz : 各方向のチャネル幅 [m]
乱流モデル
無し[m/s](laminar)uτ : 壁面摩擦速度
領域分割手法
scotch()δ : チャネル半幅[m]周期境界面は同領域( =Ly / 2 )2]
μ : 動粘性係数[m2/s
速度線型ソルバBiCG(前処理DILU)
主流方向(x): 一定の圧力勾配
圧力線型ソルバ
PCG (前処理 DIC)
主流方向(x), スパン方向(z): 周期境界
メッシュ生成に時間を要しない
ソルバ: pimpleFoam• 多くのスパコンやクラウドで計測結果があり，他のシステムとの比較が可能なオープン構造格子のため，格子数変更が容易
乱流モデル: 無し(laminar)
CAE 学会のチャネル流ベンチマークで計測．
圧力と速度のみ解くので，「圧力線形ソ 領域分割手法：周期境界面は同領域• 計測結果やジョブスクリプトは，チャネル流ベンチマークのレポジトリ[3] 参照．
ルバの解析時間が支配的」という非圧縮性
速度線型ソルバ: BiCG (前処理DILU)• 0.37M，3M，24M の格子数で検討．
流体解析の特性を素直に示す
圧力線型ソルバ: PCG (前処理DIC)• 0.37M，3M の格子数は 1〜51 ステップ，24M は 1〜9 ステップの解析時間 (Execution
レイノルズ数 Reτ✓✓✓Time) の平均値を算出し，さらに使用ノード数を掛けて，ノード時間 [s] とした．
• PPN: Type I=48，Cloud=80, OBCX=56 とフルコア，Type II=使用 GPU 数．
2

3

Type I の実行ケース
ケース名OpenFOAM

コンパイラ

主なオプション

v1912-modulev1912

Fcc 4.2.0-Nclang -O3(*1)

v1612-trad-O3

v1612+“-Ntrad -O3

v1612-trad-Kfast

v1612+“-Ntrad -Kfast から-Kfp_relaxed を除外 (*2)

v1612-clang-O3

v1612+“-Nclang -O3 -march=armv8.2-a+fp16+nosve(*3)

v1612-clang-fastv1612+“-Nclang -Ofast -march=armv8.2-a+fp16+nosvev2006-clang-O3

v2006“-Nclang -O3 -march=armv8.2-a+fp16+nosvev2006-clang-fastv2006“-Nclang -Ofast -march=armv8.2-a+fp16+nosvev2006-Gcc-O3v2006

Gcc 10.2.0-O3(*4)• (*1) spack でビルドされた Type I の openfoam/1912_200506 module．ただし，sigFpe が発生する場合があるため，module の設定で trapFpe を無効化．

• (*2) -Kfp_relaxed を指定するとソルバが実行不可のため．
• (*3) sve を有効するとソルバ並列実行時に sigFpe が発生するため．
• (*4) Gcc では-march=armv8-a や，fp，simd，lse，rdma，dotprod の有効化で，有意に高速化されることは無かった．また sve の有効化で並列計算不可．

3

0.00

4

v2006-Gcc-O3

v2006-clang-Ofastv2006-clang-O3

v1612-clang-Ofastv1612-clang-O3

v1612-trad-Kfast

0.30

0.2s (-1.3%)

0.2s (-12.4%)

0.2s (+2.4%)

0.2s (-10.3%)

0.2s (+2.7%)

0.2s (-7.9%)

0.2s (+17.7%)

0.35v1612-trad-O3

0.20
0.2s (0%)

0.25v1912-module

Node time [s] (< Lower is better)

4
0.37M 格子での 1 ノード解析時のノード時間の比較

0.40

0.15

0.10

0.05
• -O3 よ り fast レ ベ ル の 最適化のほうが高速．

• Fcc の trad モ ー ド よ り，cland モ ー ド の ほ う が 高速．

• Gcc は clang モードの-O3最適化と同程度．

0.05v2006-Gcc-O3

v2006-clang-Ofastv2006-clang-O3

v1612-clang-Ofastv1612-clang-O3

1.7s (-4.5%)

1.6s (-13.3%)

1.8s (+0.4%)

1.5s (-20.5%)

1.7s (-6.5%)

1.5s (-20.6%)

1.5v1612-trad-Kfast

2.1s (+13.1%)

3.0

v1612-trad-O3

2.0
1.8s (0%)

2.5v1912-module

Node time [s] (< Lower is better)

5
3M 格子の 1 ノード解析時のノード時間の比較

3.5

1.0
• 0.37M 格 子 と 同 様 の 傾
向．

0.5

06v2006-Gcc-O3

v2006-clang-Ofastv2006-clang-O3

v1612-clang-Ofastv1612-clang-O3

v1612-trad-Kfast

50

28.7s (-5.4%)

26.6s (-13.7%)

30.3s (+0.3%)

29.1s (-4.0%)

32.9s (+8.1%)

27.8s (-8.8%)40.0s (+24.4%)60

v1612-trad-O33030.2s (0%)

40v1912-module

Node time [s] (< Lower is better)6
24M 格子の 1 ノード解析時のノード時間の比較

70

20• 0.37M 格 子 と 同 様 の 傾
向．

10

0.0

0.5

0.4

0.3s (0%)
0.3s (+0.7%)
0.3s (-10.6%)
0.3s (+0.2%)

0.2s (0%)
0.2s (+1.2%)
0.2s (-10.3%)
0.2s (-1.2%)

02nodev1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3

0.201nodev1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3

0.3

0.2s (0%)
0.2s (+2.4%)
0.2s (-12.4%)
0.2s (-1.3%)

0.6v1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3

Node time [s] (< Lower is better)

70.37M 格子でのノード時間の比較
04node0.17• 新しいバージョンのv1912 と v2006 の み で 比較．

• 多ノードでも Fcc の clang
モ ー ド-O3 最 適 化 は Gccと同程度．

• Fcc clang モードの fast 最適化が最速で，module より 10% 程度速い．

• node の shape は 無 指 定
だ が，default allocation

mode は torus．

543

2

0
1.8s (0%)
1.8s (+0.4%)
1.6s (-13.3%)
1.7s (-4.5%)
1.7s (0%)
1.7s (+0.1%)
1.5s (-14.6%)
1.7s (-4.1%)
2.9s (0%)
3.0s (+2.2%)
2.6s (-11.4%)
2.9s (-1.9%)
3.4s (0%)
3.4s (+2.0%)
3.0s (-11.4%)
3.3s (-2.9%)
2.4s (0%)
2.4s (+0.5%)
2.1s (-11.1%)
2.3s (-4.8%)
3.4s (0%)
3.5s (+2.8%)
3.4s (+0.9%)
3.2s (-4.0%)

6v1912-modulev2006-clang-O3v2006-clang-Ofastv2006-Gcc-O3
v1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3
v1912-modulev2006-clang-O3v2006-clang-Ofastv2006-Gcc-O3
v1912-modulev2006-clang-O3v2006-clang-Ofastv2006-Gcc-O3
v1912-modulev2006-clang-O3v2006-clang-Ofastv2006-Gcc-O3v1912-modulev2006-clang-O3v2006-clang-Ofastv2006-Gcc-O3

Node time [s] (< Lower is better)8
3M 格子でのノード時間の比較
01node 02node 04node 08node 12node 24node

18• 0.37M 格 子 と 同 様 の 傾向．

09v1912-modulev2006-clang-O3v2006-clang-Ofastv2006-Gcc-O3

24node25.1s (0%)
25.8s (+2.7%)
22.8s (-10.1%)
24.0s (-4.6%)

2012node

25.7s (0%)
26.3s (+2.5%)
23.4s (-9.5%)
24.7s (-4.1%)

41.6s (0%)
41.6s (+0.1%)
36.8s (-13.2%)
39.6s (-5.0%)

26.5s (0%)
26.7s (+1.0%)
23.5s (-12.6%)
25.1s (-5.2%)

60
08nodev1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3

3004nodev1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3

4002nodev1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3

5030.2s (0%)
30.3s (+0.3%)
26.6s (-13.7%)
28.7s (-5.4%)70v1912-modulev2006-clang-O3
v2006-clang-Ofastv2006-Gcc-O3

Node time [s] (< Lower is better)

924M 格子でのノード時間の比較

10• 0.37M 格 子 と 同 様 の 傾向．

• Type I については，今後
は 最 速 の Fcc clang モ ー

ド の fast 最 適 化 さ れ た

OpenFOAM v2006 の 結

果のみを示す．

10Type II の実行ケース

ケース名

OpenFOAM

コンパイラ

主なオプション

Volta

rapidCFD-dev

Nvcc 10.1.243-O3 -gencode=arch=compute_70,code=sm_70

Pascal““-O3 -gencode=arch=compute_60,code=sm_70• Type II は GPU 機なので，OpenFOAM-2.3.1 の Thrust ライブラリによる GPU 実装である
RapidCFD を用いた．
• PCG の前処理は，DIC ではなく，AINV が用いられる [2]．
• Volta 向けビルドと Pascal 向けビルドの比較も行なった．
• MPI ライブラリは全ての module の OpenMPI 4.0.3 を使用．
• しかし，module の OpenMPI 4.0.3 では，今回ビルドした rapidCFD-dev(コミット:0fc3af285e3551234ffff9f9402c4c42f088af66) において，GPUDirect RDMA の機能を有効にするとソルバが実行できなかったので無効とした．

• なお ，RIST の山岸らの既往の研究 [4, 5] では，TSUBAME 3.0 において OpenMPI 2.1.1を用い，rapidCFD の GPUDirect RDMA の有無を比較しているが，1〜64GPU の範囲では特に有意な差が無い結果であった．

101.40.6
0.4

0.8s (+0.2%)

0.8

Pascal1.0

0.8s (0%)

1.2

Volta

PascalVolta

0.2s (0%)

0.2s (-0.1%)
Pascal

0.0

Volta

0.1

Pascal0.2

0.1s (0%)

0.3

0.1s (+0.2%)

0.402node

0.4s (-3.3%)

0.4s (0%)

0.5

0.4s (-3.3%)

0.601node

Pascal04GPU

0.4s (0%)

02GPU

Volta

01GPU

Volta

Node time [s] (<Lower is better)

0.7

0.37M 格子のノード時間の比較
Node time [s] (<Lower is better)

11

0.2
0.0

1 ノードで GPU 数を変更

1 ノードで 4GPU でノード数を変更• 1GPU のジョブはノードを共有する cx-share リソースグループで実行し，その他のジョブはノードを占有．

• Volta 向けと Pascal 向けビルドで有意な差は無い．
• ノード内で GPU を増した場合でも計算時間が概ね一定で，ノード時間が GPU 数に比例．
• ノード数が増えると，ノード時間が大きく増加し，スケールしない．
• 格子数が少ないため，ほぼ通信に費されている．
110.0
Pascal2.0

2.5

Node time [s] (<Lower is better)

1.3s (+0.9%)

1.3s (0%)

0.8s (+0.1%)

12

10

1 ノードで GPU 数を変更

• 0.37M 格子と概ね同様の傾向．

• まだ格子数が少なく，概ね通信に費されている．
3.3s (+0.4%)

Pascal53.3s (0%)

02nodeVolta

2.2s (+0.2%)

Pascal42.2s (0%)

01nodeVolta

1.3s (+0.9%)

2Pascal31.3s (0%)

04GPU

6

Volta

02GPU

Volta

Pascal

1.50.8s (0%)

0.5s (-0.1%)

01GPU

Volta

0.5

Pascal

1.00.5s (0%)

3.0

Volta

Node time [s] (<Lower is better)

12
3M 格子のノード時間の比較

04node1 ノードで 4GPU でノード数を変更

1 ノードで GPU 数を変更

04node15.5s (-0.0%)
Pascal8.0s (-1.2%)
Pascal15.5s (0%)

8.1s (0%)
Volta

10

9.7s (+0.9%)

15

Pascal

20

Volta

25

50

PascalVolta

PascalVolta

0

Pascal202node9.6s (0%)

401nodeVolta

9.7s (+0.9%)9.6s (0%)

6Node time [s] (<Lower is better)

83004GPU
8.8s (+0.2%)

106.9s (0%)

1202GPU
8.8s (0%)

1401GPU

Volta

Node time [s] (<Lower is better)

1624M 格子のノード時間の比較

6.9s (+0.1%)

13

1 ノードで 4GPU でノード数を変更• ノード内で GPU を増した場合，1GPU ベースでの並列化効率は，2GPU で約 77%，4GPUで約 70% であり，ある程度スケール．

• 1 ノードより 2 ノードのほうがノード時間が減少しスーパースケールするが，4 ノードではノード時間が大幅に増加．

• Votlta 向けと Pascal 向けビルドで有意な性能差が無いので，今後は Votlta 向けビルドの結果のみを示す．

13

0.00

0.37M 格子
0.00

3M 格子

14

主なオプション
システム

Flow Cloudv2006
Gcc 10.2.0-O3Cloud

OBCX“““OBCX

002node04node1024M 格子08node8.4s (0%)
8.4s (-0.7%)

コンパイラ

10.7s (0%)
10.3s (-4.3%)

OpenFOAM

Gcc 4.8.5
Gcc 10.2.0

20

14.4s (0%)
14.7s (+2.2%)

ケース名

Gcc 4.8.5
Gcc 10.2.0

3001node

12.8s (0%)
12.4s (-3.3%)40
27.5s (0%)
28.0s (+1.7%)

50

Gcc 4.8.5
Gcc 10.2.0

0.25

Node time [s] (<Lower is better)

1.1s (0%)
1.0s (-9.4%)

1.0s (0%)
0.9s (-13.8%)

0.8s (0%)
0.8s (-2.6%)

16nodeGcc 4.8.5
Gcc 10.2.00.50
08nodeGcc 4.8.5
Gcc 10.2.0

0.75
04nodeGcc 4.8.5
Gcc 10.2.0

1.00
02nodeGcc 4.8.5
Gcc 10.2.0

1.25
01nodeGcc 4.8.5
Gcc 10.2.0

1.50

0.6s (0%)
0.6s (-1.4%)

1.75

1.3s (0%)
1.3s (-1.5%)

2.00

Gcc 4.8.5
Gcc 10.2.0

Node time [s] (<Lower is better)

0.2s (-20.8%)

08nodeGcc 4.8.5
Gcc 10.2.0

0.20
0.2s (0%)

0.25

Gcc 10.2.0

0.1s (-21.4%)

04nodeGcc 4.8.5

Gcc 10.2.0

0.1s (0%)

02nodeGcc 4.8.5

0.1s (-12.0%)

0.15

Gcc 10.2.0

0.1s (0%)

0.0s (-4.9%)

01nodeGcc 4.8.5

0.05

Gcc 10.2.0

0.10

0.0s (0%)

0.30

Gcc 4.8.5

Node time [s] (<Lower is better)

14
Cloud および OBCX の実行ケース• Cloud や OBCX では，Gcc 10.2 を用いてビルドした v2006 を用いたが，Gcc の最適化オプションについても，デフォルトの最適化オプションである-O3 を用いた．

• Cloud のシステムコンパイラである Gcc 4.8.5 でもビルドを行なったが，以下の Cloud での結果の通り，概ね 10.2 のほうが高速だったので，今後は 10.2 の結果のみ示す．
16node15

各システムでの 0.37M 格子のノード時間の比較
Node time [s] (< Lower in better )0.50.4

Flow Type I
Flow Type II
Flow Cloud
OBCX

0.3

0.20.100.25(1GPU)

0.5(2GPU)

12(4GPU)(8GPU)
Number of nodes

48• Type I，Cloud，OBCX ともに，2 ノードまでノード時間がほぼ一定でスケール．
• Cloud, OBCX, Type II の 1GPU，Type I の順にノード時間が増加．
• Type II の 1GPU，または，Cloud・OBCX の 1 ノードが効率的．
• 定常解析では領域分割のコストが高いので，領域分割が不要な 1GPU が最も効率的．
15

16

各システムでの 3M 格子のノード時間の比較
Node time [s] (< Lower in better )43.53

Flow Type I
Flow Type II
Flow Cloud
OBCX

2.5
2
1.5
10.500.25(1GPU)

0.5(2GPU)

1(4GPU)

24(8GPU) (16GPU)
Number of nodes

812 1624• Type I は，2 ノードまでスケール．1Tofu 単位の 12 ノードで一旦減少．
• Cloud と OBCX は，2〜8 ノードまで概ねスケール．
• Type II の 1GPU は，Cloud 2 ノードと同程度の最小値．
• 定常解析なら Type II の 1GPU，非定常 LES 解析なら Cloud・OBCX の 2〜8 ノードが効率的．

16

17

各システムでの 24M 格子のノード時間の比較
Node time [s] (< Lower in better )5040

Flow Type I
Flow Type II
Flow Cloud
OBCX

3020

1000.250.51248(1GPU) (2GPU) (4GPU) (8GPU) (16GPU)
Number of nodes

12 1624 3248 64• Cloud と OBCX は，16 ノードまでノード時間が減少し，スーパースケール．
• Type I は 8 ノードを除き，24 ノードまでスケールするが，Cloud や OBCX より遅い．
• Type II は 2 ノードまではスケールし，Cloud よりもノード時間が大幅に小さい．
• 定常解析は Type II の 1GPU または 2 ノード，非定常 LES 解析は Cloud 16 ノード，OBCX16〜24 ノードが効率的．Cloud(100 ノード) と OBCX(1368 ノード) の混雑も要考慮．
17

18

各システムでの 3M 格子の解析スピードの比較

Speed [Steps/h] (> Higher is better)105• Cloud が最速• Type II は 1 ノ ー ド では Cloud と 同 程 度 だが，多ノードでは遅く104なる．

• Type I は， 概 ね 大 阪
大学 OCTOPUS(Intel103

Flow Type I
Flow Type IIFlow Cloud
OakBridge-CX
ITO

12481632
Number of nodes
18OCTPUS
Oakforest-PACS
FOCUS F
Linear64128

Xeon

6126[Skylake]

24 コ ア/ノ ー ド) と 同程度．

19

各システムでの 24M 格子の解析スピードの比較

Speed [Steps/h] (> Higher is better)105• 1，2 ノ ー ド を 除 け ば
Cloud が最速．

104

• Type II は 1，2 ノードで最速だが，4 ノードで は Cloud よ り 少 し

103

劣る．

• Type I は， 概 ね 大 阪

102
101

Flow Type I
Flow Type II
Flow Cloud
OakBridge-CX
ITO

124816 32
Number of nodes
19OCTPUS
Oakforest-PACS
FOCUS F
Linear

大学 OCTOPUS(IntelXeon

24 コ ア/ノ ー ド) と 同程度．

64128

2566126[Skylake]

20

まとめ

• JHPCN 課題で供与されている計算資源の不老の Type I，II，Cloud，および，東京大学
OBCX について，オープン CAE 学会のチャネル流ベンチマークを行なった．
• 機械学習のために実行する必要がある多数の建物形状に対する非定常 LES 解析や定常RAS 解析に対して，効率的なシステムやノード数等を選定した．
• 今後はより大きな格子数でチャネル流ベンチマークを行い，Type I，II，Cloud，OBCX の特性を検討したい．

20

謝辞• Fcc の trad モードによる OpenFOAM のビルドは非常に時間がかかる上，trad モードでのコンパイルはメモリ使用量が多いため，Type I の計算ノード 1 台を用いてビルドした場
合，メモリ不足で異常終了しない並列数の上限は 3 並列であった．そこで，本研究では，多数のビルドオプションを変更したベンチマークテストを効率良く行うため，

auto_wmake[1] を用いて，ベンチマークテストで用いるソルバと関数，および，その依存ライブラリのみをビルドした．ここに auto_wmake の作者の kurenaif 氏に感謝する．

• 本研究は，学際大規模情報基盤共同利用・共同研究拠点の支援による (課題番号:jh200064-NAH)．

Copyright
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike
4.0 International License(CC BY-NC-SA 4.0).

21

参考文献
[1] auto_wmake. Accessed: 2020-09-11. URL:
https://github.com/kurenaif/auto_wmake/.
[2] Ilya B Labutin and Irina V Surodina. Algorithm for sparse approximate inverse
preconditioners in the conjugate gradient method. Reliable Computing, 19:121, 2013.
URL: https://hgpu.org/?p=11066.
[3] オープン CAE 学会 OpenFOAM ベンチマーク. Accessed: 2020-09-11. URL:
https://gitlab.com/OpenCAE/OpenFOAM-BenchmarkTest/.
[4] 山岸孝輝, 井上義昭, 青柳哲雄, and 浅見曉. GPU・メニーコアにおける OpenFOAM の高度化支援紹介. In 第 1 回 CAE ワークショップ〜流体・構造解析アプリケーションを中心に〜. 高度情報科学技術研究機構, Dec 2017. URL:

https://www.hpci-office.jp/pages/ws_cae_171206.
[5] 山岸孝輝, 井上義昭, 青柳哲雄, and 浅見曉. OpenFOAM の GPU による高速化事例紹介.
In 平成 29 年度 高速化ワークショップ〜「京」を中核とする HPCI におけるメニーコアの活用を目指して〜. 高度情報科学技術研究機構, Mar 2018. URL:

https://www.hpci-office.jp/pages/ws_hpc_180323.
22