Meta-compiler frameworks, such as RPython and Graal/Truffle, generate
high-performance virtual machines (VMs) from interpreter definitions. Although
they generate VMs with high-quality just-in-time (JIT) compilers, they still
lack an important feature that dedicated VMs (i.e., VMs that are developed for
specific languages) have, namely \emph{multi-tier compilation}. Multi-tier
compilation uses light-weight compilers at early stages and highly-optimizing
compilers at later stages in order to balance between compilation overheads and
code quality.
We propose a novel approach to enabling multi-tier compilation in the VMs
generated by a meta-compiler framework. Instead of extending the JIT compiler
backend of the framework, our approach drives an existing (heavyweight)
compiler backend in the framework to quickly generate unoptimized native code
by merely embedding directives and compile-time operations into interpreter
definitions.
As a validation of the approach, we developed 2SOM, a Simple Object Machine
with a two-tier JIT compiler based on RPython. 2SOM first applies the tier-1
threaded code generator that is generated by our proposed technique, then, to
the loops that exceed a threshold, applies the tier-2 tracing JIT compiler that
is generated by the original RPython framework. Our performance evaluation that
runs a program with a realistic workload showed that 2SOM improved, when
compared against an RPython-based VM, warm-up performance by 15\%, with merely
UN 5\% reduction in peak performance.
Questo articolo esplora i giri e le loro implicazioni.
Scarica PDF:



