Jicchoの箱

コンピュータサイエンス,特にコンパイラの話が多め.

MENU

PLDI2022参加体験記

言わずと知れたプログラミング関係のトップカンファレンスであるPLDIに参加してきたので,忘れないうちに感想を書いておこうと思う.

PLDIとは

ACM SIGPLAN International Conference on Programming Language Design and Implementation (PLDI) は,プログラミング関係のことを広く扱うトップカンファレンスである.2022年でもう43回目の開催である.名前に「Design and Implementation」と入っているが,基礎理論から応用アプリケーション,パフォーマンス関係のことまで本当に広く扱っている.一般の投稿論文の採択率は,15〜25%あたりで,かなり低めである.PLDI 2022は,アメリカ合衆国カリフォルニア州サンディエゴで,6/13〜6/17にハイブリッド開催された.13日はチュートリアルなど,14日はISMMやLCTESやワークショップなど,15〜17日がPLDIのメイントラックだった.

LCTES

PLDIに参加したのは,併設開催のLCTESに私の論文がめでたく採択され,口頭発表するためであった.LCTESは,ACM SIGPLAN/SIGBED International Conference on Languages, Compilers, and Tools for Embedded Systemsの略で,組み込みシステム関係のことを広く扱った国際会議である.LCTES 2022では,コードサイズや消費電力の削減,FPGA関係のことが多かったように思う.「ように思う」と書いてあるのは,自分の発表を終えるまで緊張しすぎてあまり覚えていないからである.今回の発表が国際会議での初の発表だったので,久しぶりにガチで緊張していた.あまり覚えていないながらも,印象に残っている発表が2つあるので,以下に軽く紹介する.

  1. Tighten Rust’s Belt: Shrinking Embedded Rust Binaries
    Rustはバイナリコードのサイズが,Cと比べて大きくなってしまう傾向にあるらしい.ChromeOS向けのCとRustのファームウェア実装のバイナリサイズを比べているが(Table 2, 3),全体でRust実装の方が1.8倍ほど大きくなってしまっている.この肥大化の理由として,次の4つの理由を挙げている:monomorphization, compiler generated support code, hidden data structures and data, fewer compiler optimizations.それぞれについて,4章と6章で議論されている.ここ数年は,RustをCの代わりに使ってOSなどを開発する流れになっているので,このあたりの話は興味深い内容だった.

  2. RollBin: Reducing Code-Size via Loop Rerolling at Binary Level
    コードサイズ削減のための最適化は,ソースコードか中間表現レベルでよく行われるが,バイナリコードだけが与えられたときにはその最適化技術の恩恵は受けれない.そこで,バイナリコードのレベルでループをリロール(reroll)することで,コードサイズを削減するRollBinを提案している.ループアンローリング(loop unrolling)は,よく行われる最適化だが,それによって余分な命令が増えてしまうことがある(Figure 1(b)).RollBinでは,この余分に増えている分をなんとかしたらしい.バイナリレベルで,ループと帰納変数の認識,繰り返しの認識,データ依存の認識などをやるなんて大変だ.実験では,有名なSPECベンチマークで,LLVM13のコードサイズ最適化をしたものをベースラインにして,関連手法と比べていて,良い結果が出ている.

PLDI 2022

もうCOVID-19は終息したと言わんばかりの大盛況だった.200〜300人ほどは対面で参加していただろうか.もっと多かったかもしれない. 昼食はパシフィック・ビーチにテーブルが並べられ,ギラギラ照りつける太陽と爽やかな潮風を満喫しながらの食事だった. カリフォルニアにはJune Gloomはあるが,日本の梅雨のような蒸し暑さはなく,基本的にはカラッとした気候だった. Tea Timeには,コーヒーやお菓子が並べられ,みんな立ったままディスカッションや世間話をしていた. 会場には,スポンサーであるJane StreetのTシャツが置かれ,一人一つ取っていってねと書いてあった. デザインはOCamlラクダが何匹もいるデザインで,個人的には気に入っている.OCaml 5.0のリリースに合わせて作ったのだろうか.

今回のPLDIには,SIGPLANセッションがあり,2020年〜2022年のPOPLやPLDI,OOPSLAなどの発表があった.対面でやりたかったということだろうか. LCTESでもそうだったが,発表は録画され,12時間後に配信される.その配信を見て質問したくなったら,Slackで質問できるという環境で,アジア圏でオンライン参加の人でも参加しやすいようになっていた. 生配信が見たい人は,youtubeライブ配信を見るか,Gather townに参加して見るという環境だった. 個人的には,15日のCompilationのセッションが印象深かったので,軽く紹介しようと思う.

  1. Finding Typing Compiler Bugs
    コンパイラのバグを見つける話.確かdistinguished paperに選ばれていた.著者らが開発したHephaestusが2021年にgroovyc, kotlinc, javacについて調査した結果,156個ものバグがあったらしい.理論的なところは分からなかったが,話自体はとても興味深いものだった.それにしても,型周りの話は沼である.

  2. IRDL: An IR Definition Language for SSA Compilers
    Intermediate representation(IR)は,昨今では必須と呼ぶべきものだが,新しいIRが欲しくなったときに,それを手動でデザインして修正してツールやら最適化やら作って...というのはコストが高い.そこで,IRを定義するための言語IRDLを提案している.LLVMのMLIRは,28種類もの「方言」(Table 1)(色々な命令セットとか)をカバーしているが,それらに対してIRDLがどれくらい上手く表現できるか実験している.

英語力について

LCTESのところでも述べたが,今回の発表が初めての国際会議での発表だった.それに加えて,日本を出たのも初めてで,まともに英語を話したのも初めてだった.今回の経験から言えることは,圧倒的に自分の英語力が不足していて,それによる機会損失は本当に大きいということだ.研究の裾野を広げるためにも,人脈を広げるためにも,ある程度の英語力はつけていきたい.

今回の経験から言えるその他のこととして,「意外と相手の言いたいことが分かったこと」と,「意外と自分の言いたいことを伝えられた(と思う)こと」がある.これらはおそらく,日本にいながらもリスニングとスピーキングの訓練を地道に続けていたからだと思う.訓練といっても,英会話教室などに通っているわけではない.リスニングの訓練は,PodcastのアプリでBBCのニュースなどを聴いていて,スピーキングの方は,「スラスラ話すための瞬間英作文シャッフルトレーニング」(森沢洋介)という本を何週かこなしているだけである.おそらくこの本でトレーニングしていなかったら,現地で本当に全く言葉が出なかっただろう.「瞬間的に言いたいことを口から出す」トレーニングは実際に有用だったので,スピーキングが苦手な人は是非やってみてほしい.それと,話さなきゃいけないときに,発音や文法の細かいことを考えて黙ってしまうのではなくて,とにかく話すのが大事だと思う.完璧な英語でなくとも意外と伝わるのが分かったのは良い経験だった.

おわりに

総じて,良い経験だった.トップカンファレンスを肌で感じるのは良い.研究のモチベーションに繋がる.また参加したい.