Skip to main content
QUICK REVIEW

[論文レビュー] Correctness of Speculative Optimizations with Dynamic Deoptimization

Olivier Flückiger, Gabriel Scherer|arXiv (Cornell University)|Nov 8, 2017
Parallel Computing and Optimization Techniques被引用数 8
ひとこと要約

この論文は、動的言語コンパイラにおける予測的最適化の推論のための形式的枠組みを提案する。これは、高レベルの中間言語(sourir)において仮定を再帰的に表現し、明示的な 'assume' 指令を用いることで実現される。脱最適化メタデータを一等級のものとして扱うことで、定数畳み込み、インライン展開、述語の持ち上げといった、脱最適化に配慮したコンパイラ変換が正しく行えるようになり、双模倣を用いた形式的証明によって正しさが保証される。

ABSTRACT

High-performance dynamic language implementations make heavy use of speculative optimizations to achieve speeds close to statically compiled languages. These optimizations are typically performed by a just-in-time compiler that generates code under a set of assumptions about the state of the program and its environment. In certain cases, a program may execute code compiled under assumptions that are no longer valid. The implementation must then deoptimize the program on-the-fly; this entails finding semantically equivalent code that does not rely on invalid assumptions, translating program state to that expected by the target code, and transferring control. This paper looks at the interaction between optimization and deoptimization, and shows that reasoning about speculation is surprisingly easy when assumptions are made explicit in the program representation. This insight is demonstrated on a compiler intermediate representation, named \sourir, modeled after the high-level representation for a dynamic language. Traditional compiler optimizations such constant folding, dead code elimination, and function inlining are shown to be correct in the presence of assumptions. Furthermore, the paper establishes the correctness of compiler transformations specific to deoptimization: namely unrestricted deoptimization, predicate hoisting, and assume composition.

研究の動機と目的

  • 動的言語のジャストインタイムコンパイラにおける予測的最適化と動的脱最適化の相互作用を形式化すること。
  • 予測的最適化と脱最適化が存在する状況下で、原理的かつ再利用可能な推論メカニズムの欠如を是正すること。
  • 仮定を中間言語に明示的に表現することで、最適化と脱最適化の正しさに関する推論が単純化されることを示すこと。
  • 脱最適化に配慮したコンパイラ最適化、特に回復と予測管理に特化した最適化のための形式的基盤を提供すること。

提案手法

  • RIRをインspiredにした、関数の複数のバージョンと明示的な仮定をサポートする高レベルの中間言語、sourirを設計すること。
  • 述語をチェックし、偽の場合に脱最適化をトリガーする新しい 'assume' 指令を導入し、それに付随する脱最適化メタデータを定義すること。
  • 異なる仮定の下での意味的同等性を正式に証明するため、関数のバージョン間の双模倣関係を定義すること。
  • スタック上での置換(on-stack replacement)中に正しい状態再構築が保証されるように、脱最適化の不変条件を形式化すること。
  • 定数畳み込み、インライン展開などの標準的最適化が、仮定と脱最適化の存在下でも正しく保たれることを証明すること。
  • 特殊最適化(無制限の脱最適化、述語の持ち上げ、assumeの合成)の正しさを確立すること。

実験結果

リサーチクエスチョン

  • RQ1異なる仮定の下でコンパイルされた関数の複数のバージョンが、意味的に同等となる条件は何か?
  • RQ2従来のコンパイラ最適化は、脱最適化が関与する場合にどのように修正され、正しく保たれるか?
  • RQ3状態再構築やスタックフレームの合成といった脱最適化アクションに対して、どのような形式的保証を提供できるか?
  • RQ4予測実行の存在下で、述語の持ち上げやassumeの合成といった最適化をどのように正しく証明できるか?
  • RQ5仮定の明示的表現が、最適化の正しさに関する推論を単純化する役割を果たすのはどのような点か?

主な発見

  • 明示的な 'assume' 指令を備えた sourir 中間言語は、予測的最適化と脱最適化に関する明確で形式的な推論を可能にする。
  • 定数畳み込み、到達不能コードの削除、関数インライン展開といった標準的最適化は、仮定と脱最適化の存在下でも形式的に正しく証明されている。
  • 特殊最適化(無制限の脱最適化、述語の持ち上げ、assumeの合成)は、双模倣に基づく推論を用いて形式的に正しく証明されている。
  • 脱最適化メタデータが値が回復に必要であることを確認している場合にのみ、安全なデッドストア削除が可能であり、誤った最適化を防ぐ。
  • 形式的枠組みは、最適化済みコードと脱最適化済みコードのバージョン間で等価な終了性と意味的同等性を双模倣によって保証する。
  • このモデルは、脱最適化中のスタック上置換と状態再構築に関する推論をサポートし、正しい制御転送を保証する。

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

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

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

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