返回
Partial-Evaluation Templates: Accelerating Partial Evaluation with Pre-compiled Templates
DOI:10.1109/CGO68049.2026.11395215.png)
摘要
En 中文
部分求值通过将程序的某些输入替换为静态值并求值结果静态表达式来专门化程序。当应用于语言解释器时,它将解释器专门化为固定的源程序,从而产生一个可被现有编译器优化并为其生成高效机器代码的专门化解释器。虽然这种方法在即时编译器中实现了良好的峰值性能,但部分求值在编译时间上代价高昂。对于字节码解释器,部分求值必须处理和转换每个字节码指令。由于相同操作码的指令共享公共功能,部分求值会重复应用相同的转换。因此,部分求值显著增加了即时编译的编译时间。我们提出了部分求值模板,即通过手工编写的代码生成器生成的可重用集合的提前编译图。这些模板对其静态输入是参数化的,并覆盖字节码解释器实现中的公共功能。在编译时,模板通过替换其静态输入来专门化自身,将自己简化为单个预编译图,该图被编译器内联和优化。这减少了中间表示的大小,加快了部分求值以及优化。我们将该方法集成到GraalVM(一种当前的高性能多语言虚拟机)和GraalWasm(一种基于字节码解释器的WebAssembly运行时)中。我们扩展了现有的GraalVM编译器,添加了绑定时间分析以生成模板,并将模板专门化器引入到现有的部分求值器中。我们为GraalWasm中的几乎所有操作码启用了模板生成,这使部分求值时间最多减少了36%,预热时间最多减少了17%,而不会影响峰值性能。
Keyword:
partial evaluation
binding-time analysis
cogen
templates
GraalVM
virtual machines
escape analysis

