V.E.L.O.C.I.T.Y.-OS: x86-64 マシ... ノート

V.E.L.O.C.I.T.Y.-OS: x86-64 マシンコード JIT & SCEV-Lite (パート 6)

著者は、V.E.L.O.C.I.T.Y.-OS という高性能オペレーティングシステムを構築しており、CPU の L3 キャッシュ内で完全に動作させることを目指しています。スカラー演算の最大速度を達成するため、現在、抽象構文木 (AST) ブロックをランタイムで直接生の x86-64 機械語命令にコンパイルしています。このアプローチにより、以前は非大規模計算のボトルネックとなっていたクロージャチェーンのオーバーヘッドが回避されます。直接コンパイルをトリガーするために、基本的なスカラー演算のみを含むブロックを識別するスカラー検出器が開発されました。JIT コンパイラは、レジスタ割り当てとスタックフレーミングのための慎重に作成された関数プロローグを含む機械語バイトを実行可能なメモリページに発行します。ローカル変数は、メモリへのアクセスを最小限に抑えるために、CPU レジスタ R12D から R15D に直接マッピングされます。レジスタのロードとストア中の REX プレフィックスに関連する重大なバグが特定され、修正されました。さらに、JIT コンパイル中に代数的なループ解決を実行するために、SCEV-Lite というコンポーネントが実装されました。ループが予測可能な算術パターンに従う場合、SCEV-Lite は最終値を代数的に解決し、潜在的に数百万回のループ反復を定数時間 5 命令の計算に変換します。これにより、ループ実行が大幅に高速化されます。アセンブリ生成の前に動的なループ変数をスタックに正しくマッピングするために、pre_register_variables というプリパスが導入され、そのような変数がゼロとして書き戻される問題が解決されました。ベンチマークでは、このネイティブ JIT でコンパイルされたインダクションループがインタプリタと比較して 198,937 倍という驚異的な速度向上を示しました。この最適化は実行レイヤーを収縮させ、最新の CPU マイクロコードの 2 層アーキテクチャを反映しています。次のステップには、定数畳み込み、伝播、ループ展開、デッドコード削除などの従来のコンパイラ最適化パスを実装して、コード生成をさらに洗練させることが含まれます。
CdXz5zHNQW_tO8Z2K7Tgj.webp