DEV Community 日本語
フォロー
V.E.L.O.C.I.T.Y.-OS: JITコンパイラコア – ASTからネイティブクロージャへ(パート4)
著者はCPUのL3キャッシュ内で動作するよう設計された新しいベアメタルオペレーティングシステム「V.E.L.O.C.I.T.Y.-OS」を開発しています。このプロジェクトの一環として、彼らはニューラルドキュメントアーキテクチャ(NDA)プログラムの標準インタプリタで過剰なディスパッチオーバーヘッドのためにパフォーマンス上の問題に直面しました。これに対処するため、Just-In-Time(JIT)コンパイラが実装され、抽象構文木(AST)をネイティブの機械語に変換しました。このJITコンパイラはTier-1 Closure-Based JITと呼ばれ、直接機械命令の代わりにネストされたRustクロージャーを生成します。このアプローチは、コンパイル時にオペコードマッチ、スコープチェック、コントロールフローブランチを解決し、実行時に事前コンパイルされた関数ポインタの連鎖を単純に通過できるようにします。変数ルックアップは、ハッシュマップクエリから直接メモリオフセットへ最適化されており、スロットを事前に割り当ててクロージャー内に埋め込むことで実現されます。特にクロージャーがMerkleデータベースのような外部データ構造にアクセスする必要がある場合、Rustの借用チェッカーの管理が大きな課題でした。当初はArcによる高価な参照カウントが必要でしたが、高ランク特性境界(HRTB)を用いて閉鎖が任意の生涯の状態を受け入れられるようにすることで解決されました。JITエンジンはさらにカスタムサンドボックスに収められ、安全なコンパイルと実行が可能になりました。このクロージャーベースのJITコンパイルは、シリアライゼーションのボトルネックを回避し、モデル出力の高速処理を可能にします。しかし、著者はヒープ割り当てや整数演算にはさらなる最適化が必要であると指摘しています。次回では、除算のないループを含むJIT数学の最適化について詳しく説明します。