smarr
The figure for the JIT-compiled numbers uses a standard HotSpot JVM, with JIT compilation. The figures for the interpreter numbers uses a standard HotSpot JVM with the -Xint flag, so, only using the Java bytecode interpreter.
The TruffleSOM interpreter is AOT-compiled, so, it's a native binary, which is then interpreting the SOM code.
But please feel free to replicate the study for your preferred language. I am happy to discuss more about why we made certain choices.
We report on results for both, with and without just-in-time compilation. The specific focus for this work was pure interpreter performance in the context of metacompilation systems, but before compilation had a chance to kick in.
For both RPython and Truffle/Graal, it's possible to disable the JIT compilers and measure pure interpreter speed.
We report on results for both, with and without just-in-time compilation. The specific focus for this work was pure interpreter performance in the context of metacompilation systems, but before compilation had a chance to kick in.
You are free to disagree with the specific design choices of the AST and bytecode interpreters for SOM, but we put quite some effort in to have an as fair as possible comparison.
The Shape of 1.7M Lines of Code
Preventing Concurrency Bugs from Causing Harm, Automatically
Irrationally Annoyed: Sigplan Post Wrote 30Years of PL Research Out of Existence
Optimizing the “Unoptimizable” Using Old Ideas
What if we could see all concurrency bugs in the debugger?
SOMns 0.7.0 Release with Extension Modules and Artifacts
Generating an Academic Artifact from a Benchmarking Setup as Part of CI
Another Decade of SOM Language Implementation
A Typical Truffle Specialization Pitfall
How to Design Collection Libraries?
Few Versatile vs. Many Specialized Collections: Designing Collection Libraries
Communicating Sequential Processes for Newspeak/SOMns
But the bigger ones are not yet (so, no results yet).
One of the important questions to answer first is how the mapping should be done. A naive version using new/delete/smartpointers is going to have performance issues. Other options would be to use arena allocators and completely remove memory management overhead from the equation. Depending on what comparison/C++ usage scenario is desired, both options would be useful.
Writing Papers with Completely Automated Data Processing
How to Make Golo as Fast as Java. Step 5 of a Tutorial
Complete Support for Mandelbrot on Golo+GraalJIT (step 4 in series)
Add Graal JIT Compilation to Your JVM Language in 5 Easy Steps
Latex to HTML5 Conversion for Scientific Papers
Tracing vs. Partial Evaluation: Comparing Meta-Compilation for Interpreters
That's not the 'partial evaluation' per se. Instead, it is the difference between RPython and HotSpot that surfaces here. RPython does currently generated singled threaded VMs, and neither the GC nor the compilation are done in separate threads. The HotSpot JVM however can do those things in parallel and additionally has other infrastructure threads running. In the end, this increases the likelihood that the OS reschedules the application thread, which becomes visible as jitter.