OpenFOAM を用いた大規模流体計算に於ける並列化効率とファイルハンドリングの評価
九州大学 情報基盤研究開発センター
小林泰三
概要
計算機を用いた数値流体計算は歴史が古く、研究室で代々開発されてきたコードで大規模且つ高精度で高速な計算が様々に行われている。その一方で、分子軌道計算での Gaussian の様に、センターの計算機で標準的な流体計算を行う需要もでてきており、東京大学 HA8000 クラスターシステムや筑波大学の T2K にはオープンソー
スの Computational Fluid Dynamics (CFD) ツール集である OpenFOAM が導入されサービスとして提供されている。そこで、九州大学情報基盤研究開発センターの高性能演算サーバ (sugoka) に OpenFOAM-1.7.1 を導入してサービスを開始するとともに、sugoka での OpenFOAM の並列化効率とポスト処理に関わるファイルハンドリングの評価を行った。

1 OpenFOAM とはOpenFOAM (Field Operation and Mnipulation) [1] は、複雑な条件の流体計算から分子動力学や電磁気学等、さまざまな現象をシミュレートする構造化された統合ソルバー集である。OpenFOAM は OpenCFD 社が開発し、GPL ライセンスの下でオープンソースとして開発と配布がなされている。
自動車メーカーを始め企業ユーザーも多く、毎年 Open Source CFD International

Conference と名付けられた国際会議が開催されており、日本でも「オープン CAE 学会」[2] など様々な活動団体があり、開発と利用の双方で活発な活動がなされている。

2 高性能演算サーバでの OpenFOAM 利用環境
高性能演算サーバへの OpenFOAM の導入は、表 1 に示すように Intel Compiler とIMPI を利用して、ノード間通信に InfiniBand を利用できるように行った。mpiexec に与えるオプション I MPI DEVICE に rdma を指定して InfiniBand を利用する。また、追加のソフトウェアとして swak4foam と rhoPisoDyMFoam が利用可能である。swak4foam は、境界条件に数式表現を与えられる groobyBC などのライブラリとユーティリティをまとめたもので、高速演算サーバではライブラリの部分を利用可能である。rhoPisoDyMFoam1

表 1 OpenFOAM 利用環境

名称バージョン

ソフトウェアOpenFOAM

1.7.1

コンパイラ

Intel Compiler XE, Intel 64

12.0.4.191

IMPI4.0 update 2MPI
ノード間通信InfiniBand

追加ソフト

swak4foam

as of 20111003

追加ソフト

rhoPisoDyMFoam

for 1.7.1

は、筆者が九州工業大学の高橋公也研究室と共同で開発した移動境界条件を扱える圧縮性流体ソルバーである。

3 性能評価高速演算サーバでの OpenFOAM-1.7.1の 性 能 評 価 と し て 、並 列 化 効 率 を 調 べ
5mm

た 。ソ ル バ ー は rhoPisoFoam を 用 い(a)I MPI DEVICE には rdma を指定している。
5mm

ベンチマークに利用した系は、1,434,041

point mesh の３次元オカリナのモデルで(b)ある（図 1）。時間刻みを 10−7 [s] にとり、200 ステップに一度ディスクへの I/O を行40mm(c)

い、これを 1000 回繰り返した平均（20 万図160mm(a) (0.0175, -0.0025, -0.06)(b) (0.019, -0.01, 0.0)(c) (0.0125, -0.0045, 0.04)

数値モデルステップ）を求めた。その結果をプロセッ
サコア数対計算速度 [s−1 ] で示したのが表 2
図 2 である [3]。ベンチマークに利用した計算の問題サイズにも依存する事であるが、概ね1000 core 程度までは並列化による性能向上がみられたが、それ以上では伸びなかった。
1000 core 以上の場合は不安定で MPI job 自体が立ち上がらない事もあり、OpenFOAMのソルバー側の問題であるのか、IMPI の問題であるのかの切り分けは出来ていない。
次に、ファイルハンドリングについて考察する。OpenFOAM のソルバーは、指定したステップ間隔毎に各物理量を独立したファイルとして保存する。また、並列計算する場合

2

表 2 200 ステップの実行時間に基づいた並列化効率

core 数

16122448s−1

0.0890684

0.228798

0.467127

0.953137

2.038696192384768864

4704

3.67786

7.64761

12.7174

22.4273

24.7663

33.3557は、各 core 毎に独立してファイルが生成される。従って小容量のファイルが多量に生成される事になる。生成される総ファイル数は以下で見積もる事が出来る。
総ファイル数 = 物理量 × 並列数 × ステップ数/出力インターバル(1)

筆者が高橋らと研究している流体音のリ
並列数は 864、ステップ数が 5 × 105 、インターバルが 200 であるので、総ファイル数は 36,720,000 になる。ファイルの容量は、gzip 圧縮を掛けた状態で１ファイルが 200kB のオーダーであるので、全体でおよそ 5TB になる。このファイルをポスト処理にRate of exec time [1/sec]

コーダーモデルの計算では、物理量は 17、1000
100
1010.10.011掛ける事になる。ポスト処理は、まず、並10100 1000 10000

Number of Cores

列化の為に分割されたファイルをマージし図2てその後でデータ解析や可視化を行うので並列化効率あるが、実際の具体的な手順は以下になる。

1. tar でデータをファイルに纏める
2. ftp で纏めた tar ファイルをポスト処理環境に転送する
3. tar ファイルを展開する
4. reconstructPar で領域分割されたファイルを纏める
5. データ解析を行い、可視化ソフトフォーマットへ変換
筆者の計算では、OpenFOAM での流体計算そのものに要する実時間はほぼ１日である。しかし、その後のポスト処理は、上述の各段階で２〜３日要する状況であり、流体計算が上がってから可視化を経て研究の議論が出来るまでに２週間ほど掛かっている。

3

4 まとめと今後の課題
情報基盤研究開発センターの高速演算サーバに OpenFOAM-1.7.1 を InfiniBand を利用する IMPI/ICC で導入し、その並列化効率とファイルハンドリングについての評価を行った。その結果、OpenFOAM のソルバーは 1000 core 程度までスケールする事が確認できたが、その一方で微小なファイルが大量に生成されるので、ポスト処理がネックになることが判明した。現状では、筆者の計算と同様に、大きなステップ数の流体計算をする OpenFOAM ユーザーである（株）ヤマハ殿や理研殿に、上述の方法を提示してご利用を戴いている。ポスト処理までを含めた計算全体の効率化が今後の課題である。

参考文献[1] http://wwww.openfoam.com/[2] http://www.opencae.jp/wiki[3] 高橋公也,「移動境界問題の大規模流体シミュレーションと動的負荷分散の評価」,
JHPCN 11-NA124