プログラムの高速化・並列化サービスの事例

チューニングレポート<要約>CFDコードCode_SaturneのHECToRへの移植と最適化

*ここに掲載するのは、デアズベリー研究所のZhi Shang博士らによるHECToRレポート「Porting and Optimisation of Code_Saturne on HECToR, Zhi Shang, Charles Moulinec, David R. Emerson, Xiaojun Gu, Daresbury Laboratory」を要約したものです。

[2016年12月掲載]



概要

ハードウェアに搭載される大規模なプロセッサー数は今や10万コアを超え、アルゴリズムのスケール性に多くの注目が集まっています。しかしながら計算流体力学(CFD)の分野では、その前処理に関して大きな問題が生じています。多くの工学的問題では一般に、方程式系(CFDではNavier-Stokes方程式)は計算メッシュへ離散化されます。その並列実行においては、良好な負荷バランスを持つメッシュの領域分割が必要です。これは構造格子であれば比較的直截的に可能ですが、非構造格子では困難な問題の一つです。ペタスケールコンピューティングへの移行により直ちにこの問題が明らかになります。100,000コアを有効に扱うには、計算メッシュは極めて大きくならざるを得ず、領域分割ソフトウェアにも並列処理が必要になります。この報告は、大規模コア数での領域分割における既存のソフトウェアの動作を調査することを目的としました。

CFDソフトウェア"Code_Saturne"は、1997年以来EDF R&D (Electricit? de France)により開発されています[1]。これはコロケート格子を用いた有限体積法(FVM)をベースにしており、様々なセルタイプ(四面体、六面体、角柱、角錐、多面体)や格子構造(非構造、ブロック構造、ハイブリッド)により構成された3次元メッシュを扱うことが可能です。これにより、Code_Saturneは高度に複雑な構造のモデル化が可能になっています。また、熱移動や乱流の有無に限らず、非圧縮性および圧縮性流体のシミュレーションが可能です。

Code_Saturneは当初から並列コードとして設計されています。そのプリプロセッサーはメッシュファイルを読み込み、現状ではソルバーの入力用に、MetisあるいはScotchを用いてメッシュを分割します。シミュレーションが終わったら、ポストプロセスにより様々な可視化パッケージ向けのファイルへ結果は変換されます。並列コード結合機能はEDFのFVMライブラリーで提供されます。2007年からCode_Saturneはオープンソースとなり多くのユーザに解放されました[2]。このため、フリーに入手可能な領域分割ソフトウェアを対象として報告します。

Code_Saturneの大きな利点の一つに、工業領域での活用があります。このコードは本来、エネルギー生産業界における様々な工業的応用や研究のために設計されました。そこには、原子力熱水力発電、ガスおよび石炭の燃焼、ターボ機械、暖房、換気および空調が含まれます。複雑な形状を扱う能力の例として、デアズバレータワー周囲の気流、DARPA-2潜水艦周囲の水流のシミュレーションが行われました。
この結果、Code_Saturneは、Fluent [5], STAR-CD [6], CFX [7], OpenFoam [8]と良好な一致を示しました。ここで用いるのはバージョン2.0.0-beta2です。調査対象のメッシュ分割パッケージには、Metis, ParMetis, PT-Scotch, Zoltanを採り、これらをCode_Saturneへ組み込みました。潜水艦のテストケースには、121,989,150 (121M)の四面体セルを用いました。

Code_Saturneへのメッシュ分割ソフトウェアの組込み

多くの並列CFDコードでは、ハロセルを用いたデータ交換により通信を行います[9]。ハロセルは異なるサブ領域間の内部境界を表現します。ここではサブ領域は一つのコアあるいはプロセッサに割当てられているものとします。また、以降現れるメッシュ分割品質の指標にはハロセルが含まれます。

·Metis 5.0pre2

Metis 5.0pre2はシリアル実行メッシュ分割パッケージで[10]、デファクト標準として広く利用されています。これは、効率的な並列実行のための高品質な分割メッシュを生成します。これをCode_Saturneへ組込み、METIS_PartGraphKway関数を用いてメッシュ分割を行います。

·ParMetis 3.1.1

ParMetis 3.1.1は並列領域分割パッケージです[11]。大きなメッシュを扱う際に、シリアル版のMetisではメモリー制約のため不可能になります。そこで最新バージョンのParMetis 3.1.1を、並列メッシュ分割実行のためにCode_Saturneへ組み込みました。ParMETIS_V3_PartKway関数を用いてメッシュ分割を行います。

·PT-Scotch 5.1

PT-Scotch 5.1 [12]はもう一つの並列領域分割パッケージです。Code_Saturneへ組み込まれ、SCOTCH_dgraphPartを用いてメッシュ分割を行います。

·Zoltan 3.0

Zoltan 3.0[13]はさらに別の並列領域分割パッケージです。これは幾何学的メッシュ分割を行います。作業時間の関係上、Code_Saturneへ導入したのみ段階での結果を示します。

メッシュ分割の品質

ここでは、122M個の計算セルを持つ潜水艦構造テストケースを用います。非構造格子の並列性能に重要なのは、負荷バランスと隣接およびハロセルの性能指標、および領域分割パッケージの選択です。

Metis 5.0pre2は、121Mセルを8192個の領域に分割する際には約32GBのメモリーが必要となり、HECToRフェーズ2aノードのメモリーに収まりません(Code_Saturneには自身の持つ並列メッシュ生成ツールが備わっており、空間充填曲線法(SFC)[15]とプロセッサ数分単純に分割する方法の2種類が含まれます。ですがこのプロジェクトの実行時点では、これらは開発途中だったため並列分割が出来ない状態でした)。

次に並列分割ツールである、ParMetis 3.1.1およびPT-Scotch 5.1を調査しました。
ParMetis 3.1.1は8129分割までは少なくとも32プロセッサ、131,072分割までは同じく512プロセッサが必要でした。一方PT-Scotch 5.1は如何なる場合の16プロセッサで十分でした。領域分割の戦略は明らかにプロセッサ数に依存し、その品質に影響を与えます。

グラフ変換実行時間に関しては、ParMetis 3.1.1は32から512プロセッサへ増やすと約12.5倍高速化し、16プロセッサを用いたPT-Scotchは32プロセッサを用いたParMetis 3.1.1に比べてほぼ倍の性能です。このため両者の性能はほぼ同じと言えます。分割時間はParMetis 3.1.1では、32分割に比べ8,192分割は約1割の時間増加のみで済んでいます。16,384分割では40秒以下でParMetis 3.1.1による分割が終了します。PT-Scotch 5.1の分割はそれよりずっと時間が掛かっています(32分割で220秒、131,072分割で520秒)。

得られた分割に対する重要な尺度は、領域間で負荷がどのようにバランスされるか、およびサブ領域間での通信量を示すエッジカットの数です。このケースでは、ParMetis 3.1.1による分割のほうがPT-Scotch 5.1よりも僅かに多くのエッジカット数を生成します。一般的に、65,536分割までは両者の差は10%以内です。しかしながらより大きな分割数ではParMetis 3.1.1の方が57%大きくなります。

負荷バランスに関しては、PT-Scotch 5.1は良好な負荷バランスを示し(常に83%以上)、ParMetis 3.1.1は巨大領域分割に対しては一般に性能は良くありません。分割の最大隣接数は両者共に増加しますが、PT-Scotchの方がより少なくなります。こうした事から、Code_SaturneにとってはPT-Scotch 5.1の方が良好な分割性能を示すことが示唆されました。

HECToR上での並列性能

ここでは、HECToR Phase2a (Cray XT4) [16]の8192コアまでを用いた場合のCode_Saturneシミュレーションの並列性能を示します。時間ステップ当りの実行時間は512コアまでは差がありません。1024コアから先はZoltan (RIB)が最も遅い結果を示しました。これはグラフベースのツールに比べてエッジカット数と隣接数が大きいためです。2048コア以上では、Metis 5.0pre2が最も高速となりました。

Metis 5.0pre2は2048コアまでほぼ線形に加速します。並列領域分割ツールにおいてはPT-Scotchが最も高性能で、Metis 5.0pre2に対して1割遅い程度です。

領域分割ツール自身の示す性能指標は、実際のDARPAテストケースを用いたCode_Saturneシミュレーションの性能に有意な指標とはならず、実行時の制約メモリー限界の8192コアを用いた場合までシリアル実行のMetis 5.0pre2が最高性能を示しました。

謝辞

このプロジェクトは、NAG Ltd.が運営するHECToRの分散計算科学および工学(CSE)サービスの基に実行されました。英国の国立スーパーコンピューティング・サービスである、HECToR:英国リサーチ・カウンシル・ハイエンド計算サービスは、リサーチ・カウンシルを代行するEPSRCが管理しています。そのミッションは英国学術界の科学および工学の研究支援です。HECToRスーパーコンピューターは、UoE HPCx Ltd.およびNAG Ltd.のCSEサポートサービスにより管理運営されています。

文献

[1] F. Archambeau, N. Mechitoua, M. Sakiz. Code_Saturne: A Finite Volume Code for the Computation of Turbulent Incompressible Flows - Industrial Applications. International Journal on Finite Volumes, 1(1), 2004.
[2] Code_Saturne open source: http://www.code-saturne.org.
[3] M. Sohaib, M. Ayub, S. Bilal, S. Zahir, M.A. Khan. Calculation of flows over underwater bodies with hull, sail and appendages. Technical Report of National Engineering and Scientific Commission, Islamabad, 2001.
[4] Cindy C. Whitfield. Steady and Unsteady Force and Moment Data on a DARPA2 Submarine. Master Thesis of the Faculty of the Virginia Polytechnic Institute and State University, August 1999, USA.
[5] www.fluent.co.uk.
[6] www.cd-adapco.com/products/STAR-CD.
[7] www.ansys.com/products/fluid-dynamics/cfx.
[8] www.openfoam.com.
[9] EDF R&D. Code_Saturne version 1.3.2 practical user's guide. April 2008.
[10] G. Karypis, V. Kumar. Metis: A Software Package for Partitioning Unstructured Graph, Partitioning Meshes, and Computing Fill-Reducing Orderings of Sparse Matrices. Version 5.0, 2007.
[11] http://glaros.dtc.umn.edu/gkhome/views/metis/.
[12] http://www.labri.fr/perso/pelegrin/scotch/.
[13] http://www.cs.sandia.gov/zoltan/Zoltan.html.
[14] http://www.cse.scitech.ac.uk/sog/.
[15] http://www.win.tue.nl/~hermanh/stack/dagstuhl08-talk.pdf.
[16] http://www.hector.ac.uk.
関連情報
MENU
Privacy Policy  /  Trademarks