イベントレポート: 「コンパイラ勉強会」を開催しました!

2018年11月16日

丸岡です。

2018/11/10(土) にフィックスターズ主催で、「コンパイラ勉強会」を開催しました。

7月に「Halide勉強会」を開催しましたが、その第2弾ということで、今回はもう少し分野を広げて「コンパイラ」というテーマにしました。

イベント公開当初から応募者がとても多く、ピーク時は参加応募数が100人を超えるなど、予想を大きく上回る参加希望者数で私自身とても驚いていました。
当初は45人だった一般参加枠を後ほど60人まで引き上げたのですが、それでも最終的にキャンセル待ちが16人ほど出てしまい、参加出来なかった方は申し訳ありませんでした。
それほどまでにコンパイラ技術が今注目されているということですね!

以下、本発表のレポートです。

LLVM Backend の紹介

最初の発表では丸岡から、LLVMのBackendについて紹介しました。

コンパイラといえばLLVMということで、学生時代の研究で得られた知見を元にして発表しました。
内容としてはMIPSバックエンドを例に取り上げて、バックエンド内部の中間表現や、Instruction Selectionにおける中間表現のLoweringの様子、
バックエンドにおけるターゲット情報の実装を紹介しました。

最近ではDomain Specificなコンパイラの研究や開発が盛んですが、その多くはバックエンドにLLVMを採用しています。
新規プロセッサのバックエンドコンパイラを作る際にも、LLVMの採用は有用な選択肢に入るでしょう。
今回の発表が、みなさんのコンパイラ開発に役立てば幸いです。

Deep Learning向けコンパイラ TVM の紹介

2つ目の発表は増田さんから、TVMについて紹介していただきました。

TVMはDeep Learningの推論用コンパイラとして、とても注目されているOSSです。
前回のHalide勉強会でもLTでTVMに関する発表が2件ありました。

増田さんはTVMのレビュアーをやっている方で、QiitaにもTVMに関する記事を幾つか投稿しており、TVMの公式ページでもAMDGPUバックエンドに関する記事にも著者として入っています。
内容としてはTVMの概要的な説明から、開発中の機能や開発コミュニティに関する説明など、開発者ならではの濃密な発表をしていただきました。

VC4C: RaspberryPiのGPUを使うOSS OpenCLコンパイラ開発の現状と課題

3つ目の発表はIdein株式会社の徳田さんから、RasPi GPUのコンパイラに関する発表でした。

Load/StoreするためにDMA操作する必要があったり、Cache Incoherentだったり、コンパイラがレジスタスピルを保証してなかったりという
個性的なアーキテクチャの中でのコンパイラ開発の苦労話が多数ありました。(筆者もその苦労にとても共感していました…)

発表の最後には

「みなさんコンパイラ書きたいですよね?」
「コンパイラ開発してない人生はFAKEなので、みなさんコンパイラ書きましょう」

という本勉強会一の名言まで飛び出し、大変賑わった発表でした。

また、この発表のときにTwitterのハッシュタグがトレンド12位に浮上しました。Twitterでの実況やコメントも盛況でしたね!

https://twitter.com/Fixstars_JP/status/1061147972379934720

未経験プログラマがコボルコンパイラを作った話

4つ目の発表では、かの伝説のハッカー吉岡さんに登壇していただきました。

温故知新ということで、30年以上前のDEC在籍時に日本語COBOLを開発した際のお話でした。業務用コンパイラにおける開発プロセスの話はとても貴重でしたね。
テスト駆動で当時からCIを構築して開発していたなど、今でも主流になっている開発プロセスが当時から行われていたのは驚きでした。

GENESISコンパイラへのZ3の導入

最後の発表は弊社の朝倉から、GENESISコンパイラに関する発表でした。

GENESISコンパイラはFixstarsが開発しているFPGA向けのHalideコンパイラで、ストリームI/Oを用いたデータフローアーキテクチャへと変換します。

参考: HalideでつくるDomain Specific Architectureの世界

Halideの論文ではその特徴として、「簡易なインターバル計算によって、Polyhedral Modelのような複雑な解析を使用することなくループ変換や領域推定を実現することができる」と記述されているのですが、
領域外アクセスに対する条件分岐が存在するなどの複雑なアクセスパターンの場合では、真の必要領域を推論出来ない場合が存在しています。
そこでZ3というMicrosoft Researchで開発されているSMTソルバを用いて、必要領域推定を強化した、という内容でした。

その後LTでは、TVMのRelay IRの紹介、WebAssemblyの紹介、seccamp2018におけるコンパイラ自作コースに関する話がありました。
特に最後のコンパイラ自作のLTは実際にコンパイラを開発してみたい気持ちになる、とても良い締めくくりだったと思います。

残念ながら参加出来なかった人も、発表資料やTogetterのまとめを見て当日の雰囲気を感じていただければと思います。

最後になりますが、本発表やLTで登壇していただいたみなさま、そしてご来場いただいたみなさま、
本当にありがとうございました!

About Author

akira.maruoka

Leave a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Recent Comments

Social Media