原文:Pioneering Automatic Differentiation: Code Generation - Published 27/01/2023 By Johannes Lotz
NAG の自動微分ツール dco/c++ による最速のランタイム
この記事の読者は、アジョイント自動微分(Adjoint Automatic Differentiation; AAD)が導関数を計算するためのコンピューターサイエンスの手法であることを知っていると思います。正しく使用すれば、AAD は他の手法よりもはるかに高速かつ正確に導関数を計算します。
NAG は、アーヘン工科大学のコンピューター科学者との協力を通じて、自動微分の分野で革新を続けており、最先端の製品に最新のアップデートを提供しています。そして、NAG は、10 年以上にわたって、AAD を含む包括的で強力な C++ AD ヘッダーライブラリ製品 dco/c++ を提供し、顧客のニーズに応えてきました。
それはどういうものでしょうか?
ソース変換の効率性と演算子オーバーロードツールの柔軟性・利便性を組み合わせたハイブリッド技術で、プライマルコード、タンジェントコード、アジョイントコードをサポートします。
弊社の最新の AD 技術は、1 次導関数および高次導関数を計算するためのスカラーモードとベクトルモードの全ての組み合わせをサポートし、これまで以上に効率的に計算を行います。
これは何を意味するでしょうか?
これは、1 次および高次の導関数の計算が、以前のバージョンよりも 2 〜 10 倍速く(Fig.1 を参照)、他の手法よりも最大 36,000 倍速いことを意味します。しかし、どのように?
C++ の演算子オーバーロードの手法は広く普及しており、ロバストで、使い易いことが知られています。これは、C++ 標準に依存しており、言語の機能セット全体で動作するためです。C++ コンパイラは、適用性と長期的な保守性を保証します。
ソース変換は、非常に効率的な派生コードを生成する優れた方法です。何故でしょうか?ソース変換ツールには、変換ステップとコンパイルステップという2つの利点があります。変換ステップでは、基礎となる微分ルールの性質に基づいて最適化を実装できます。さらに、コンパイルステップでは、着実に進歩しているコンパイラの組込み最適化が継承されます。
弊社の新しい動的コード生成では、両方のアプローチを組み合わせました。オーバーロードの手法を用いてメモリ内のプログラムの表現を生成し、さまざまなモード(プライマル、タンジェント、アジョイント)を C++ ファイルにアンパースします。このアプローチの動的な性質(実行時に表現を構築する)は、区別されるコードに重要な制約をもたらします。つまり、制御フローは入力データに依存することはできません。プリプロセッサの従来の要素と組合わせて、ラムダ式などの最新の C++ 機能を賢く利用することで、ブランチにおけるこの制約を克服します。これと共に、弊社の高度なアプローチにより、ソース変換がこれまで以上にアクセスし易くなりました。
ユーザーは、ロバスト性と計算効率を提供する新しい方法の恩恵を受け、計算時間とコストを大幅に節約できます。
NAG は、強力なサポートと共に、最も先進的で効果的なアルゴリズムを顧客に提供し続けています。dco/c++ は現在、金融、モータースポーツ、航空宇宙、生物医学、海洋、土木工学など、ほぼすべての分野における最適化、リスク計算、および、その他の多くの中規模から大規模の問題に対する正確な導関数を提供します。
このソリューションは、迅速かつ信頼性の高い意思決定を伴う複雑な問題で必要とされる速度と精度を提供します。NAG の専門知識とサポートにより、最速のタイムフレームで dco/c++ から最大の成果を得ることができます。
これら最新のアップデートは、12 年以上の研究開発の成果であり、弊社のすべてのソリューションは、厳密にテストされ、専門的にサポートされ、50 年以上の経験に支えられています。