Skip to main content
QUICK REVIEW

[論文レビュー] Souper: A Synthesizing Superoptimizer

Raimondas Sasnauskas, Yang Chen|arXiv (Cornell University)|Nov 13, 2017
Parallel Computing and Optimization Techniques参考文献 17被引用数 42
ひとこと要約

Souper は、SAT/SMT ソルバーを用いて、関数的で制御フローのない中間表現(IR)に類似した LLVM IR を模倣したものにおいて、同等でより効率的なコードシーケンスを探索することで、自動的に新規のコンパイラ最適化を発見・適用する合成スーパーオプティマイザーである。Clang バイナリのサイズを 4.4%(3 MB)削減し、LLVM および Microsoft Visual C++ の両方で手作業で実装された最適化をもたらした。

ABSTRACT

If we can automatically derive compiler optimizations, we might be able to sidestep some of the substantial engineering challenges involved in creating and maintaining a high-quality compiler. We developed Souper, a synthesizing superoptimizer, to see how far these ideas might be pushed in the context of LLVM. Along the way, we discovered that Souper's intermediate representation was sufficiently similar to the one in Microsoft Visual C++ that we applied Souper to that compiler as well. Shipping, or about-to-ship, versions of both compilers contain optimizations suggested by Souper but implemented by hand. Alternately, when Souper is used as a fully automated optimization pass it compiles a Clang compiler binary that is about 3 MB (4.4%) smaller than the one compiled by LLVM.

研究の動機と目的

  • 複雑なミドルエンドコンパイラ最適化の開発・保守にかかる高い工学的コストに対処すること。
  • 自動合成によるスーパーオプティマイゼーションが、手作業で実装することが困難または時間がかかる、新規で高影響力のある最適化を発見できるかどうかを検討すること。
  • LLVM や Microsoft Visual C++ を含む複数のコンパイラにわたる、単一の汎用スーパーオプティマイザーの実用可能性を評価すること。
  • 行動可能な、検証済みの提案を通じて、自動最適化の発見と本番コンパイラへの統合を可能にすること。
  • 将来の形式的検証済みコンパイラの分野において、合成と証明生成ソルバーを組み合わせる可能性を調査すること。

提案手法

  • LLVM IR を模倣した関数的で制御フローのない中間表現(IR)を用い、51 種類のビット幅ポリモーラル整数命令をサポートする。
  • オリジナルのコードシーケンスと合成されたコードシーケンスの間で等価性チェックを実施するため、SAT/SMT ソルバーを用いることで正しさを保証する。
  • Gulwani 他(2011)が提案した合成アルゴリズムを拡張し、最適な命令シーケンス(定数畳み込みや伝搬を含む)を生成する。
  • LLVM の最適化パスとして動作させ、定数伝搬や不要コード削除による段階的利点を生かす。
  • 最適化結果をキャッシュすることで、以降のビルドにおけるコンパイルオーバーヘッドを低減し、ウォームアップ後はほぼ定数時間の性能を達成する。
  • 他のコンパイラ(例:MSVC)の IR を Souper の IR に変換することで、異種コンパイラ間での最適化発見を可能にする。

実験結果

リサーチクエスチョン

  • RQ1合成スーパーオプティマイザーは、標準的なコンパイラパスでは表現できない、新規で正しい、有益なコンパイラ最適化を自動的に発見できるか?
  • RQ2SAT/SMT 解法とプログラム合成に基づくスーパーオプティマイザーは、実世界のコンパイラにおいて、従来の手作業最適化をどれほど上回れるか?
  • RQ3同じスーパーオプティマイザー枠組みを、LLVM や Microsoft Visual C++ といった異なるコンパイラインfra に効果的に適用できるか?
  • RQ4大規模バイナリ(例:Clang)に適用した場合、自動スーパーオプティマイズーションのパフォーマンスとコードサイズへの影響は、従来のコンパイルと比べてどうか?
  • RQ5証明生成ソルバーを用いた形式的検証済みコンパイラへの統合において、合成された最適化の潜在的可能性は何か?

主な発見

  • LLVM 自体をコンパイルした際、Souper は約 7,900 種類の異なる最適化を発見し、85,000 回以上適用した。
  • Souper を用いてコンパイルした Clang-3.9 バイナリは、標準的な LLVM 最適化でコンパイルした同じバイナリと比べて 3 MB(4.4%)小さくなった。
  • 最適化されたバイナリで 2% のパフォーマンスレグレッションが生じたが、コードサイズの削減は顕著な実用的利点を示した。
  • 初期のコンパイルは 5× から 25× 遅くなるが、キャッシュがウォームアップした後は、標準的な LLVM コンパイルとほぼ同等の時間(9 分 vs. 8 分)にまで短縮された。
  • Souper が提案したいくつかの最適化は、LLVM および Microsoft Visual C++ コンパイラの両方で手作業で実装され、その実用的価値が裏付けられた。
  • Souper の IR は Microsoft Visual C++ の IR に成功裏にマッピングされ、LLVM 以外のコンパイラでも最適化発見が可能であることが実証され、異種コンパイラへの適用可能性が示された。

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

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

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

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