「京」コンピュータにおけるOpenFOAMの大規模数値流体計算による建物風圧予測
清水建設(株) 技術研究所
○ ファム バン フック
野津 剛
内山 学
菊池 浩利
OpenFOAMワークショップ ― OpenFOAMを京で使おう ― 2013/09/27
本日の内容
「京」における建物の局部風圧の予測 (当初の予定)詳細は他の機会でご報告
「京」におけるOpenFOAMの実装※ (主催の主旨)移植の苦労話 (課題と解決策)
大規模並列計算へのコードの改良
計算例
2
※自ら,京コンピュータに移植したもの
OpenFOAMの利用経験
2009年,オープンソース活用の一環として利用
2010年,東工大TSUBAMEスパコンで実装
コード一部のGPU化による計算高速化
多くの建設分野の課題をシミュレーションより解析
2012年9月~ 「京」コンピュータで実装
産業利用
広域3D津波シミュレーション広域3D風環境シミュレーション
「京」でのOpenFOAMの現在の実績
計算モデル
最大作成モデル : 100億格子
最大計算モデル : 64億格子
通常の計算モデル : 10億格子
利用ノード・並列数
最大ノード数 : 6,144 (「京」の8%)
最大並列数 : 12,288平均並列数 : 3,072
100億格子・1万並列処理は「京」で計算可能
※これらはOpenFOAM又は「京」コンピュータの限界に至っていない
「京」コンピュータの概略
計算ノード:82,944CPU : 8コア (2GHz)/ノード
メモリ: 16GB/ノード
ネットワーク
Tofu 3次元トーラスのネットワーク
コンパイラ
富士通社製コンパイラ• Fortran, C, C++
コンパイル環境
クロスコンパイル• フロントエンドと計算ノードと違うCPU環境
「京」におけるOpenFOAMの移植・実装
計算環境整備の課題 ----- 「京」保有課題
コンパイラ
計算環境 (データの転送など)ネットワーク (Tofuの取扱い)
計算大規模化の課題 ----- 「10億格子以上」共通課題
超大規模モデルの計算 (整数32ビットの壁)大規模並列通信 (未だ実績の無い数千以上の並列)
大規模プリ・ポスト処理
6
マニュアルで対応可
OpenFOAMのコンパイラ
OpenFOAMのコンパイラの実績
GCC: 4.5.0 and aboveLLVM Clang: 3.1Intel ICC: 12.1.0 and 13.1.0
C++:2011年規格 ISO/IEC 14882:2011• コア言語への機能追加
• 標準C++ライブラリの拡張
• C++ Technicalライブラリの大部分の追加
7
「京」でのコンパイラ環境
富士通社製コンパイラ利用経験がないため,不安があった.
「京」でのOpenFOAMのコンパイル
コンパイルしてみると,不明なエラー…コードを修正,コンパイルは成功ですが,
計算してみると,不明なエラー…
どちらが悪いのか,判断は難しかった
OpenFOAMコード自体
自分の修正部分
コンパイラ
「京」
9
「京」でのOpenFOAMのコンパイル
解決策 (よりスマートな方法があるかも)
エラーメッセージの分析• OpenFOAMコードの解読 (難関,4百万行を最小限・適切修正?)
エラー処理• 複数サイト情報の参照(C++, CFD Online,英語)
• 類似なエラーとその解決策は記載
• コードの一部を修正・追加
• C++のクラス・オブジェクト関数の定義
• ライブラリのリング追加
• 共有ライブラリがうまくリンクできない対策
• 「京」におけるクロスコンパイルの対応
• 段階的に分けてコンパイル
2ヵ月間で対応済み10
移植したOpenFOAMバージョン
標準バージョン
OpenFOAM-1.6.xOpenFOAM-2.0.xOpenFOAM-2.1.xOpenFOAM-2.2.x
開発バージョン
OpenFOAM-1.6-ext• 付属ライブラリは多い
※バージョンによるコンパイルの大きな変更が無い.
11
大規模モデルの計算:整数32bitの壁
12
20億までコードの修正整数64bit対応
面の数(あり得ない):-1,880,129,018
計算は異常終了!
900兆まで
面の数:17,742,344,704~177億格子数: 5,908,037,632~ 59億
OpenFOAMの改良C++オブジェクト指向
整数定義: Labelクラス• Int, Long int• Long long int (追加)
関連コードの一部修正
大規模並列計算:分散処理通信の問題
既存コードのMPI通信 (無駄な通信が多い)
集団通信:• MPI_Scatter• MPI_Gather
改良コードのMPI通信 (必要通信だけを実施)
隣接通信(1対1通信):• MPI_Send• MPI_Recv
13
大規模並列の計算性能が向上
1000並列以上の計算には急激な性能悪化
ベンチマークの検証対象(性能出にくい)
・格子 :非構造・ソルバ: simpleFOAM
(RNG, AMG)
・格子 : SnappyHexMesh格子,・ソルバ: pisoFOAM (LES, AMG)
500m×500m
中規模市街地モデル(1千万格子,定常計算)
風洞再現の大規模モデル(1.32億格子,非定常計算)
大規模並列性能(Strong Scaling)
0
200
400
600
800
0 400 800 1200 1600
加速
率
並列数
既存コード(1.32億格子)
改良コード(1千万格子)
改良コード(1.32億格子)
現在,さらにチューニングによる高速化を実施中
大規模プリ・ポストの処理:~10億格子の壁
16
モデルの作成(プリ)
シミュレーション
初期化
領域分割
データ結合ポスト処理
可視化
従来の処理方法は困難
プリ・ポストPCのメモリ不足 (1000GB~10億格子)
大規模プリ・ポストの処理:~10億格子の壁
プリ・シミュレーション・ポストの一環の並列処理を整備
OpenFOAMの既存ツールの改良
モデルの作成(プリ)
シミュレーション
データ出力・可視化
初期化
ロードバランス
ポスト処理
画像処理
データ処理等
※メッシュ図は1/4解像度で表示
大規模計算モデルの作成の一例
OpenFOAMの既存ツールで基本的に対応可能・計算モデル:64億格子・並列数: 12,288※snappyHexMeshの一部改良で適用
部分の細分化により複雑な形状を再現可能
19
格子:1.1千万格子 1.2億格子
大規模計算モデルの作成の一例
64億格子計算メッシュの段階的に細分化
大規模計算の一例
計算モデル: 64億格子並列数 : 12,288
※現在,安定的に計算中
実験との比較検証 (風圧のピーク値)
21
Exp. Cal.(従来,1.32億) Cal.(10億格子)
-5-4-3-2-10
28 29 30 31 32
Pres
sure
coe
ffic
ient
time(s)
実験
Cal.(10億)Cal.(1.32億)
実験と高い精度の局部風圧を再現可能
22
10
億格
子モ
デル
の可
視化
(渦
度等
値面
)
京コンピュータにおけるOpenFOAMの大規模計算は可能
単体CPUコアの実行性能-CPU周波数
0
1 104
2 104
3 104
1.8
2
2.2
2.4
2.6
2.8
3( )
tim
e(s
) CP
U(G
Hz)
1.6.x 1.7.1 2.0.x 2.1.x 2.1.1 2.1.1 2.1.1OpenFOAM
T1.2 T2.0 T2.0
SandyBridge(2012)
K K KMachines
計算時間
クロック数(GHz)
CPU Intel Westmere(2010)
AMD Opteron(2006)
SPARC64TM VIIIfx(2012)
自動チューニング
※チューニング中
1.6.x 1.7.1 2.0.x 2.1.x 2.1.1 2.1.1 2.1.1OpenFOAM
T1.2 T2.0 T2.0
SandyBridge(2012)
K K KMachines
※チューニング中
CPU Intel Westmere(2010)
AMD Opteron(2006)
SPARC64TM VIIIfx(2012)
単体CPUコアの実行性能-CPU消費電力
0
1 104
2 104
3 104
40
60
80
100
120
140
tim
e(s
)消
費電
力(W
)
計算時間
消費電力(W)
自動チューニング
単体ノードの高い実行性能
25
0
1
2
3
4
5
6
7
8
0 2 4 6 8 10 12 14 16
加速
率
CPUコア・並列数
市販マシン(Intel Sandy Bridge,8coresx2)
京コンピュータ(SPARC 64th VIIIfx,8cores)
T2(Intel Westmere,6coresx2)
Tofu ネットワークの特徴
26
領域分割による性能変化
27
(B)3次元分割(x)(A)1次元分割 (C) 3次元分割(y)
領域分割による性能変化 (96並列)
0
200
400
600
800
A B C
Tim
e(s)
領域分割
(B)3次元分割(x)(A)1次元分割 (C) 3次元分割(y)
0
16
32
48
64
80
96
0 32 64 96 128
加速
率
Nodes
大規模並列性能
29
T2(Infiniband, QDR)
※チューニング中
K(Tofu)
1千万メッシュ
1.32億メッシュ
K(Tofu)
大規模計算モデルの適切
まとめ
OpenFOAMの実装を通じて,京コンピュータでは
オープンソースの利用とその高い性能を得ることが可能.• 複数コミュニティーサイトから有意な情報を得られた.
• オープンソースであるため,コードの柔軟な変更が可能.
• ただし,大変でした・・・.
建物の局部風圧の研究予測において実用レベルの性能を確認• 多くの実用研究に展開
30