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(第六部分)

作者正在构建一个名为 V.E.L.O.C.I.T.Y.-OS 的高性能操作系统,旨在使其完全运行于 CPU 的 L3 缓存之中。为最大化标量操作的执行速度,他们现在在运行时直接将抽象语法树(AST)块编译为原始 x86-64 机器指令。该方法规避了闭包链的开销,而闭包链此前是非大规模计算的主要瓶颈。为此,他们开发了一个标量检测器,用于识别仅包含基本标量操作的代码块,以触发直接编译。JIT 编译器随后将机器代码字节发射至可执行内存页中,其中包括精心设计的函数序言,用于寄存器分配和栈帧构建。局部变量被直接映射至 CPU 寄存器 R12D 至 R15D,以最小化内存访问。在寄存器加载与存储过程中,发现并修复了一个涉及 REX 前缀的关键缺陷。此外,实现了一个名为 SCEV-Lite 的组件,用于在 JIT 编译期间执行代数循环求解。若循环遵循可预测的算术模式,SCEV-Lite 将通过代数方法求解最终值,将可能涉及数百万次迭代的循环转化为常数时间的五指令计算,从而显著加速循环执行。引入了一次名为 pre_register_variables 的预处理阶段,在汇编生成前正确地将动态循环变量映射至栈上,解决了此类变量被写回为零的问题。基准测试显示,与解释器相比,采用此原生 JIT 编译的归纳循环实现了高达 198,937 倍的速度提升。该优化层叠了执行层级,镜像了现代 CPU 微代码的两层架构。下一步计划实现经典编译器优化流程,包括常量折叠、传播、循环展开和死代码消除,以进一步细化代码生成。
CdXz5zHNQW_tO8Z2K7Tgj.webp