Skip to main content
QUICK REVIEW

[論文レビュー] Efficient Implementation of a Higher-Order Language with Built-In AD

Jeffrey Mark Siskind, Barak A. Pearlmutter|arXiv (Cornell University)|Nov 10, 2016
Numerical Methods and Algorithms参考文献 6被引用数 7
ひとこと要約

この論文は、実行時リフレクションを用いてAD演算子を埋め込み、多相的フロー解析を用いてそれをコンパイル時へ移行することで、動的関数型言語において高性能で第一級の自動微分(AD)システムを実現する。その結果、手で最適化されたFortranと同等の数値的性能が得られ、ネストされた導関数計算においてもプリプロセッサベースのADツールを上回る性能を示した。

ABSTRACT

We show that Automatic Differentiation (AD) operators can be provided in a dynamic language without sacrificing numeric performance. To achieve this, general forward and reverse AD functions are added to a simple high-level dynamic language, and support for them is included in an aggressive optimizing compiler. Novel technical mechanisms are discussed, which have the ability to migrate the AD transformations from run-time to compile-time. The resulting system, although only a research prototype, exhibits startlingly good performance. In fact, despite the potential inefficiencies entailed by support of a functional-programming language and a first-class AD operator, performance is competitive with the fastest available preprocessor-based Fortran AD systems. On benchmarks involving nested use of the AD operators, it can even dramatically exceed their performance.

研究の動機と目的

  • 高水準の動的言語とFortranのような低水準の数値言語との間の自動微分(AD)における性能格差を埋めること。
  • 数値的効率を犠牲にすることなく、関数型プログラミング言語で第一級の、ネストされた、高階級のADを可能にすること。
  • 積極的な静的解析を用いて実行時オーバーヘッドを排除し、AD変換をコンパイル時へ移行すること。
  • 組み込みADを備えた関数型言語が、従来のプリプロセッサベースのADシステムと同等またはそれ以上の性能を達成できることを示すこと。
  • 現代のコンパイラおよび高水準の数値プログラミングのための実用的で効率的なADの基盤を提供すること。

提案手法

  • ソース・ツー・ソース変換により前向きおよび逆向きADを表現するための、高階級のプリミティブ(例:j*、primal、tangent、bundle)を新たに導入する。
  • 実行時リフレクションを用いて、関数をそのAD版(例:f → f_forward)に動的に変換し、(derivative f) の評価時に実行する。
  • 全プログラム・インタープロシージャルな多相的フロー解析を用いて、実行時リフレクションおよびすべての非数値的インフラを削除する。
  • AD変換を実行時からコンパイル時に移行し、手で最適化されたFortranと区別がつかないほど高度に最適化された数値コードを生成する。
  • 言語の構造を、数値およびADの基本を備えた即時評価ラムダ計算として捉え、高性能コンパイラの中間表現と同型であることを活用する。
  • 積極的な最適化コンパイルを用いて、すべての実行時オーバーヘッドを除去し、最終的に浮動小数点演算のみを残す。

実験結果

リサーチクエスチョン

  • RQ1動的で関数型の言語が、手で最適化されたFortranと同等またはそれ以上の性能を発揮する第一級の、ネストされた、高階級のADをネイティブにサポートできるか?
  • RQ2静的解析を用いてADの実行時リフレクションを体系的に排除し、Fortran並みの性能を達成できるか?
  • RQ3高水準のADシステムを実装することは可能か?その際、関数型プログラミングの表現力と低水準の数値コードの効率性を両立できるか?
  • RQ4多相的フロー解析は、AD変換済みコードにおける非数値的実行時インフラを効果的に特定・削除できるか?
  • RQ5AD変換を実行時からコンパイル時に移行することで、特にネストされたまたは高階級の導関数シナリオにおいて、測定可能な性能向上が得られるか?

主な発見

  • 本システムは、Tapenade や ADOL-C といった、最も高速なプリプロセッサベースのFortran ADツールと同等の数値的性能を達成した。
  • ネストされたAD応用を含むベンチマークでは、C++およびFortranの従来のプリプロセッサベースADシステムを著しく上回った。
  • 前向きベクトルAD(backprop-Fv)を用いたバックプロパゲーションの例では、Chickenにおけるベースライン比で1626.73倍遅くなったが、最適化済みバージョンでは正規化実行時間を1626.73に保った。これは最適化が効果的で、測定可能であることを示している。
  • 粒子およびサドルの例における本システムの性能は、一部の実装ではベースライン比でそれぞれ14.97倍および8.09倍速く、強力なスケーラビリティを示した。
  • 多相的フロー解析の使用により、実行時リフレクションおよび非数値的インフラが完全に削除され、Fortran並みの効率性を持つ数値コードが得られた。
  • プロトタイプは、高水準言語における第一級のネストされたADが、表現力と効率性の両方を兼ね備えられることを示しており、高水準の機能が必然的に性能を低下させるという仮定に疑問を呈している。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。