LLVM および自動最適化の勉強会を開きたいなと考えています

by syoyo

(追記: LLVM 勉強会,やります)

LLVM の勉強会、また自動最適化の勉強会みたいなのを開こうかなぁと考えています.

LLVM 勉強会

LLVM については、まずはなんだかみんなまだよく知らないようだしちょっと誤解しているみたいなので,
これを機会にしっかりと知るといいんじゃないかな、というのがある。
(ただ、私は LLVM コミッタとかではなくて、外野にいる一ユーザです)

加えて、私としては自動最適化ともからんでくるけど実行時最適化(JIT, partial evaluation)を
自分のプログラムに取り入れたいときに LLVM コンパイラインフラがすでにある物としては
practical で十分な feature を持っているので使っていこうかなと思っていて、
そのためにそこらへんをもう少しよく知って共有したいから.

次に自動最適化の勉強会.

もう手作業で最適化の時代ではない(時間がかかるし)。
もっと賢くなろうぜ、つまりなにかしら自動最適化フレームワークを作って、コンピュータに最適化させようぜ。
というモチベーションから.
で、今の世の中どういう研究が行われてンのよというのをサーベイしていきたいなと.

なぜ自動最適化というと、

– いまの CPU は複雑だ. アセンブリ結果がそのままパフォーマンスを決めるわけではない(OoO 実行, uOP などのせいで)
– プロセッサも多様化している, CPU, GPU, GPGPU. 個々のアーキティクチャに手作業で最適化することのコストが高い
とくにマルチコア化の時代でメモリアクセスの最適化が重要になってきているが、これの手作業最適化は大変.
– ハンドオプティマイズを過信していないか. 多くの場合コンパイラの最適化の方が早いし優秀である.
– ハンドオプティマイズのコストが高すぎる. 自動最適化なら数秒で終わるところに、数日 〜 数ヶ月人手をかけるだけの価値があるか(その間によりよいアルゴリズムが見つかったり、新しいアーキティクチャのプロセッサが発売されたら?).

汎用プログラムを自動最適化というのはハードルが高いので無理としても、
なんからの特定アルゴリズムを DSL(ドメイン固有言語)で記述し、
あとは DSL コンパイラがターゲットアーキティクチャに自動で最適なコードを出力してくれる、
ということができると思っている。
コード生成は静的(コンパイル時決定)にかぎらず、ランタイム時の入力データ分布に応じて動的にやったり、
実行結果の統計からフィードバックさせる(if の予測指示, キャッシュサイズの設定など)というのもあり.

既存研究でいえば、FFTW, Spiral, DSL からの SIMD 最適化あたりがやっていること.
(ここに少しまとめてる.
http://lucille.atso-net.jp/blog/?p=323
)

学会でいえば CGO がやっていること、みたいな感じといえば伝わるひとには伝わるだろうか.

ただ、私はコンパイラ屋でもなくコンパイラが専門でもないので、日本のコンパイラコミュニティを知らない。
LLVM や、自動最適化の勉強会の招集をかけたら(日本で)どれくらいのひとが興味をもち, 集まるのかが不安だ.
(レンダラコンサルを通じて、海外では LLVM や自動最適化に興味を持っているひとは何人か知っていますが)

いまのところ日本のコンパイラコミュニティからこのような企画がない所を見ると、
やっぱり興味があるひとはいないのかなぁ?…

まあちょっと身の回りに聞いてみて、4,5 人くらいあつまりそうだったら企画してみようかと思います.
(もしくは興味があるかたはメールでおしらせください)

Advertisements