HN🔥 169
💬 27

Game Boyを爆速化!JITコンパイルでWASMへ変換する「WATaBoy」が凄すぎる

energeticbark
1日前

ディスカッション (10件)

0
energeticbarkOP🔥 169
1日前

Game Boyの命令セットを直接WASM(WebAssembly)へJITコンパイルすることで、従来のネイティブインタープリタ方式を凌駕するパフォーマンスを実現した「WATaBoy」の紹介です。

1
milch
1日前

すごく面白い記事だね。ネイティブインタプリタとiOS上のJIT-on-WASMの比較も見てみたかったな。

2
dag100
1日前

学部生が手がけたプロジェクトとしては信じられないほど素晴らしいね。かなり感動した。FirefoxがChromeやSafariより25%も遅いっていう結果は興味深いね。なぜなんだろう?

3
ahartmetz
1日前

そりゃネイティブインタプリタより速いのは当然だよ。WASMのオーバーヘッドは約20%だけど、インタプリタは1000%くらいあるからね。ここで重要なのは、GameBoyのJITランタイムを動かせたっていう事実そのものだよ。

4
jonny_eh
1日前

それってJIT-in-JITってこと?JiJITとか?

5
mikepurvis
約23時間前

2013年にAndrew Kelleyが書いた、NESコードを静的に再コンパイルしようとした記事 [1] はずっと大好きだったんだ。彼はかなりの成果を出したんだけど、当時の手書きアセンブラはLLVM IRのような高レベルなものへの変換と相性が悪くて、結局行き詰まってしまった。彼は結論で、実行時にデータが得られるホットパスだけを再コンパイルするJITの手法こそが現実的で、そうでない部分は気にしなくていいって指摘してるんだよね。実際にそれが動いているのを見られるのはすごくクールだ。 [1]: https://andrewkelley.me/post/jamulator.html (https://andrewkelley.me/post/jamulator.html)

6
lightedman
約23時間前

それでもネイティブコードで書かれたエミュレータには勝てないよ。俺が持ってるエミュレータは、166MHzのMMXなしPentiumでも、このエミュレータがCore Ultra i9で動くより速く動作するぞ。

7
bawolff
約22時間前

iOSではJITコンパイルができないからDolphinはiOSに存在しない…。まあ、AppleにはJIT制限の例外が一つだけあって、それがWebブラウザなんだ。WebKitのJavaScriptエンジンであるJavaScriptCoreは、高性能化のためにJITコンパイルを使っている。だからJS関数が何度も呼び出されれば、最終的に最適化されてネイティブマシンコードにコンパイルされる。WebAssemblyも同じこと。ヘッドラインの理由がずっと気になっていたんだけど、これは本当に面白い回答だ。制限を回避する見事な方法だね。他のプロジェクトにも応用できるのか気になるところ。

9
jcmfernandes
約18時間前

めちゃくちゃ面白い!16年前の修士課程で、仮想マシンの授業中にDolphinとLLVMを使って同じようなことをやったよ。インタプリタをLLVMビットコードにコンパイルして、それを使って基本ブロックを構築したんだ。めちゃくちゃ遅かったけどちゃんと動いたし、作業していてすごく楽しかったな。