A Survey of Adaptive Optimization in Virtual Machines

読んだ論文のメモを書いておくことにします.まず,「A Survey of Adaptive Optimization in Virtual Machines」から.

訳すと,「仮想機械の適応型最適化のサーベイ」というところでしょう.一般的なコンパイラで実装されている静的な最適化手法ではなく,実行時のプロファイル情報に基づく最適化手法が対象です.静的な手法では,最大公約数的な最適化しかできませんが,実行時に最適化することによって,実行時のOSやCPUなどの環境や,アプリケーションの使われ方に応じた,より強い最適化をかけることができるようになります.この論文では,そのような具体的な方法が,網羅的に参照されており,非常に参考になります.

個々の手法を紹介しているとキリがない,というか本文そのままになってしまうので,ざっくりと目次(の一部)だけ紹介すると,こんなところです.

  • 選択的最適化
    • 全体を最適化するのではなく,一部だけ最適化する方法について.カウンタやサンプリングにもとづいて,最適化するべきメソッド(もしくは他の単位)を決めて,それだけをコンパイルします.
  • フィードバックによる最適化のためのプロファイリング
    • 実行時に最適化のための情報を収集する手法について.実行時に情報を収集するので,低オーバーヘッドで,いかに必要な情報を取得するか,についてです.実行時に得られる情報によって,強い最適化をかけるということは,アプリケーションの振舞いが大きく変化すると最適化が効果を失う,ということになるので,そのあたりをどうするか,というのも課題となっています.
  • フィードバックによる最適化コードの生成
    • プロファイルに基づいた最適化されたコードを生成する手法について.インライニングとか,コードの配置とか,命令スケジューリングとか,複数バージョン(例えば,コンパイル時に複数のコンパイル結果を用意しておいて,入力パラメータに応じて最適なコードを選択する)とか,です.
  • その他のフィードバックによる最適化手法
    • 動的な型をキャッシュするとか,投機的最適化とか,ヒープの最適化とか.

言語処理系さん(あんまりいないか..)には必読ではないでしょうか.内部構造に興味が人もどうぞ.