Skip to main content
QUICK REVIEW

[論文レビュー] A Language for Describing Optimization Strategies

Bastian Hagedorn, Johannes Lenfers|arXiv (Cornell University)|Feb 6, 2020
Parallel Computing and Optimization Techniques参考文献 37被引用数 4
ひとこと要約

この論文では、高パフォーマンスなコード生成のためのカスタムで合成可能な最適化戦略をプログラマーが定義できる機能的戦略言語Elevateを紹介する。Elevateの一次的抽象化を介して組み立てるリライト規則として最適化を表現することで、Halide や TVM と同等のパフォーマンスを達成し、ディープラーニングワークロードにおいてベースラインコード比最大110倍の高速化を実現した。また、固定APIスケジューラを超えた完全な制御性と拡張性を提供する。

ABSTRACT

Optimizing programs to run efficiently on modern parallel hardware is hard but crucial for many applications. The predominantly used imperative languages - like C or OpenCL - force the programmer to intertwine the code describing functionality and optimizations. This results in a nightmare for portability which is particularly problematic given the accelerating trend towards specialized hardware devices to further increase efficiency. Many emerging DSLs used in performance demanding domains such as deep learning, automatic differentiation, or image processing attempt to simplify or even fully automate the optimization process. Using a high-level - often functional - language, programmers focus on describing functionality in a declarative way. In some systems such as Halide or TVM, a separate schedule specifies how the program should be optimized. Unfortunately, these schedules are not written in well-defined programming languages. Instead, they are implemented as a set of ad-hoc predefined APIs that the compiler writers have exposed. In this paper, we present Elevate: a functional language for describing optimization strategies. Elevate follows a tradition of prior systems used in different contexts that express optimization strategies as composition of rewrites. In contrast to systems with scheduling APIs, in Elevate programmers are not restricted to a set of built-in optimizations but define their own optimization strategies freely in a composable way. We show how user-defined optimization strategies in Elevate enable the effective optimization of programs expressed in a functional data-parallel language demonstrating competitive performance with Halide and TVM.

研究の動機と目的

  • Halide や TVM のような既存のスケジューリングAPIに見られる、拡張性と合成性の欠如を是正すること。これらはユーザーを固定された組み込み最適化のセットに制限する。
  • アルゴリズムの記述と低レベルの最適化意思決定を分離することで、多様で特化したハードウェアにわたるパフォーマンスの移植性を実現すること。
  • 複雑な最適化パイプラインをリライト規則の列として表現する、原理的で合成可能かつ拡張可能な戦略言語を提供すること。
  • Elevateにおけるユーザー定義の最適化戦略が、ディープラーニングカーネルなどの実世界の高パフォーマンスワークロードにスケーラブルであることを示すこと。

提案手法

  • Elevateは、高階関数コンビネータを用いて最適化戦略を合成する機能的言語として設計されており、モジュラで再利用可能な最適化定義を可能にする。
  • 最適化戦略は、関数的データ並列プログラムの中間表現に適用されるリライト規則の列として表現される。
  • システムはユーザー定義の抽象化とドメイン特化最適化をサポートしており、標準的なコンパイラ変換のセットを超えた拡張が可能である。
  • ElevateはRiseという機能的言語と統合されており、コード生成によりCにコンパイルされ、パフォーマンス比較には標準的なコンパイルフラグが使用される。
  • このアプローチは明確な意味論を持つ項書き換えを活用しており、既存のスケジューリングAPIで一般的なヒューリスティック的・暗黙的な振る舞いを回避する。
  • 戦略は制御的で決定論的なリライトプロセスを用いて体系的に適用され、Liftのような先行システムで用いられる確率的探索を回避する。

実験結果

リサーチクエスチョン

  • RQ1機能的戦略言語を用いて、Halide や TVM のような手動チューニングされたシステムと同等またはそれ以上のパフォーマンスを達成する複雑な高パフォーマンス最適化戦略を表現できるか?
  • RQ2Elevateにおけるユーザー定義の最適化戦略は、どの程度異なるハードウェアプラットフォームにわたるパフォーマンスの移植性を達成できるか?
  • RQ3Elevateの合成可能で拡張可能な最適化アプローチは、Halide や TVM の固定APIスケジューリングと比較して、表現力と制御性の面でどの程度優れているか?
  • RQ4Elevateはディープラーニングカーネルなどの実世界ワークロードにスケーラブルであり、最先端のフレームワークと同等のパフォーマンスを達成できるか?

主な発見

  • Elevateは、Halide や TVM の固定APIスケジューラの制限を克服し、合成可能で拡張可能かつ完全にユーザー制御可能なカスタム最適化戦略の定義を可能にする。
  • システムはHalide や TVM と同等のパフォーマンスを達成するコードを効果的に生成し、1つの最適化されたRise生成コードがベースラインコード比最大110倍の高速化を達成した。
  • Elevateの戦略言語は、タイリング、ベクトル化、並列化を含む複雑な最適化パイプラインを、ディープラーニングワークロードで15万ステップのリライト手順を用いてサポートする。
  • Intel i5-4670K CPU上で一貫したコンパイルフラグを使用した結果、Elevateが生成するコードのパフォーマンスは、同等の最適化を用いたTVMと同等であることが示された。
  • Elevateのアプローチは明確な意味論を提供し、暗黙的またはデフォルトの振る舞いを回避しており、専門家が最適化プロセスを完全に制御できる。

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

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

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

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