アーヘン工科大学(RWTH Aachen)、ドイツ航空宇宙センター(DLR)、Numerical Algorithms Group(NAG)のコラボレーション: CODA と dco/c++
本記事は、J. Lotz(NAG)、U. Naumann(RWTH Aachen)、F. Kasielke(DLR)、A. Stuck(DLR)によって作成されました。
ヨーロッパの航空機産業は、CO2 排出量の削減や航空機騒音の低減など、社会の要請に応え、グローバルリーダーシップを維持するために、大きな課題に直面しています。これらの課題は、将来の製品の性能にかかっており、航空機の技術や設計原則に大きな変革が必要です。そしてこれには、シミュレーション能力、計算効率、スケーラビリティの改善が必要となります。この記事で示すように、コンピューターサイエンス技術の一つである自動微分(Automatic Differentiation; AD)を利用することで、実装された関数の一次および高次の微分を効率的かつ正確に計算することができ、計算効率の向上を実現することができます。
CODA は、フランス国立航空宇宙研究所(ONERA)、ドイツ航空宇宙センター(DLR)、エアバス、および、彼らのヨーロッパの研究パートナーが共同で開発している数値流体力学(CFD)のソフトウェアです。CODA は ONERA、DLR、エアバスが共同で所有しています。
最先端の HPC システムで航空機の効率的な解析と最適化を実現するために、二次の有限体積法と高次の Discontinuous-Galerkin 法を用いて、非構造格子上で、高レイノルズ数の流れに対して、ナビエ・ストークス方程式を解いています。スケーラブルな自動微分(AD)は、大規模な航空機の多岐にわたる設計最適化にとってキーとなる技術です。
この記事では、adjoint CODA 計算のパフォーマンスを劇的に向上する、NAG の自動微分(AD)ソリューション dco/c++ の最新機能のポテンシャルを紹介します。この研究は、DLR Institute for Software Methods for Product Virtualization(DLR-SP)において、アーヘン工科大学(計算工学のソフトウェアとツール)と共同で、修士論文(A. Kuyumcu による)の枠組みで実施されました。dco/c++ の機能を CODA と組み合わせて評価するために、流れの状態に関する離散化された CFD 残差の reverse-mode AD に注目しました。これは、解析チェーンの中でも CFD メソッド全体の代表的な部分と考えられます。dco/c++ の動的コード生成の機能を利用することで、標準的なテープアプローチに比べて 10 倍の高速化が観測されました。
CODA は Modern C++ で書かれており、テンプレートやラムダ式などの機能を利用しています。これらの機能は、通常「テープベース」アプローチで構築された、演算子オーバーロードを用いる AD ライブラリの適用を容易にします。これは、算術型(例えば「double」など)の代わりに特別なデータ型を用いて、プログラミング言語のすべての組込み演算と関数をオーバーロードし、実装を評価することを意味します。このようにして、テープがメモリに書き込まれ、評価されたプログラムがグラフとして表現されます。そして、いわゆるインタープリテーションで、このグラフを使用して adjoint 計算を実行することができます。
CODA には、異なる粒度レベルで AD 抽象化レイヤーと AD エントリーポイントが付属しており、これにより、離散残差の reverse-mode AD の3つの異なる戦略を調査することができました。このうち2つはテープベースで、3つ目はテープフリーです。
-
テープベースのグローバル adjoint モード:
グローバル adjoint モードでは、完全な残差関数を記録し解釈するために、dco/c++ を使用します。 -
テープベースのローカル adjoint モード:
上記のグローバルモードとは対照的に、ローカルアプローチでは、残差評価の計算グラフが相互に独立した反復的な面やセルの操作(フラックスの評価など)で構成されていることを利用します。そのため、より小さいテープを使用して、微細な面やセルの操作を記録し、独立して解釈することができます。さらに重要なことは、テープのサイズがシステムの自由度に依存しないことです。実行時のパフォーマンスは、テープベースのグローバル adjoint モードと同様です。 -
テープフリーのローカル adjoint モード:
このアプローチは、dco/c++ の新しい動的コード生成(codegen と呼ばれる)機能を CODA がサポートするローカル微分オプションと組み合わせます。テープは事前処理ステップとして一回生成されますが、それは、残差の adjoint をローカルに計算する C++ コードを生成するために一度だけ使用されます。導関数の評価中は、テープを記録したり使用したりせず、以前に生成された adjoint コードのコンパイル済みバージョンを呼び出します。このアプローチは、反復的な面やセルの操作を含むローカル adjoint モードにうまく適合します。
この研究では、3つの異なる自動微分(AD)戦略のパフォーマンスを評価するために、異なるメッシュ解像度を持つ 3D free field cuboid と NACA0012 翼型を使用しました。図1(下図)は、フラックス計算のレベルで生成された adjoint の使用(テープフリーのローカル adjoint モード)が、選択されたすべてのテストケースにおいて、dco/c++ のテープベースのローカルアプローチに比べて adjoint 残差評価の計算量を1桁減らすことを示しています。なお、これらの結果を評価する際には、dco/c++ のテープベースのアプローチが他のアプローチやツールに比べて既に著しく高速であることを念頭に置くことが重要です。
図1:dco/c++ の動的コード生成による実行時間の改善
x 軸は相対時間を表しており、adjoint 計算の実行時間を、残差関数計算の実行時間で割った値です。
この改善は、CODA の計算効率を劇的に向上します。こうした改善により、計算効率を向上させ、航空機産業の現在と未来の課題を支援することができます。
AD と dco/c++ は多くの利点をもたらします;dco/c++ は、高い柔軟性、低いメンテナンスコスト、効率性、高精度を提供します。NAG のサービスを利用することで、最も効率的なツールにアクセスできるだけでなく、ターゲットに合わせたサポートを受けることができます。