tozima's blog

主に自分のための、論文の読書記録

Machine Learning in Compiler Optimization

by Zhenng Wang and Michael O'Boyle

コンパイラにおける最適化への機械学習の応用に関するサーベイ。はじめての accessible introduction を謳っていて、中身も良くまとまっている良いサーベイ

概要

「新しい高度なプログラム変換」を機械学習で発見する話かと思って期待していたが、そうではなくて、本論文の主題は「最適なコンパイルオプションを探す」というものだった。考えてみればそれはそうで、明らかに後者の方が有望だろうし、むしろ何で前者のようなものを期待したのだろうか*1。「最適なコンパイラオプションを探す」という課題にしても(もちろん)簡単なものではなくて、何を学習させるかや、プログラムをどのように機械学習コンポーネントへの入力にするのかといった点の選択を適切に行う必要がある。その重要性も明らかで、ターゲットのOSやプロセッサごとに最適なオプションを探すことが如何に大変であるかが量的な情報と共に議論されている*2

何を学習させるかについては、コスト関数を学習させるものと、最適なオプションを学習させるものとに分けられて解説されている。議論の分量から量るに、主要なポイントではないように思われる。

特徴量の取り扱いは詳しく議論されており、重要度の高さが伺える。静的な量(例:命令の種類や数)の他に、構文木や制御フローグラフのような構造(に工夫をしたもの)や、動的に得られる情報(例:ループ回数、ホットコード、CPU負荷、動的命令数、L1キャッスミス数など。左から右に高レベルから低レベルとなっている)を使うこともできる。特に印象的だったのは動的特徴量の重要性に関する議論で、ほとんど実行されない部分についての情報が機械学習コンポーネントを混乱させることがあるという指摘である。また reaction-based な手法というものもあって、これは予め注意深く定められた複数のコンパイルオプションでの実行結果から特徴量を抽出するというものである。特徴量抽出を Deep Learning を用いて自動で行う方法も議論されているが、これは静的な情報しか扱えず、動的な情報から特徴量を抽出するにはまだ人手が必要らしい。

私見

新しいプログラム変換の自動発見のような期待したものは future work のようで残念だったが、特徴量エンジニアリングの節と参考文献は検証屋にも興味深い内容ではないだろうか。あと、上では述べていないが、(たぶん第一著者の趣味もあって)並列プログラムの最適化についての内容が厚く、そこも面白いかもしれない。

*1:もちろん理由は明らかで、個人的な興味が複雑なプログラムの性質の推論にあるからです。

*2:例えば、手で良いコスト関数を作るには、アーキテクチャごとに数ヶ月から年単位の開発が必要だそう。