Exupery 0.15 is released and available via pre-built images, SqueakMap, and package universes. This release includes some significant bug fixes and a few performance enhancements.
Instructions are here:
http://wiki.squeak.org/squeak/Exupery
The biggest practical benefit is a major bug has been fixed which makes running with Exupery much more reliable. Crashes are no longer expected after about an hour or so.
The two major optimisations were adding more addressing modes and also compiling calls to the interpreters primitives. This means that code with many calls to primitives can benefit from Exupery's PICs. Compiling primitives is responsible for the doLoopsBenchmark showing a benefit again, Exupery used to perform identically to the interpreter on a Core 2.
While Exupery can improve the macro benchmarks sometimes it will slow code down a little as well so practical performance gains with unrestricted compilation are still a release or two away.
Here's the current benchmarks:
arithmaticLoopBenchmark 390 compiled 80 ratio: 4.875 bytecodeBenchmark 724 compiled 250 ratio: 2.895 sendBenchmark 663 compiled 385 ratio: 1.722 doLoopsBenchmark 381 compiled 235 ratio: 1.621 pointCreation 394 compiled 389 ratio: 1.013 largeExplorers 269 compiled 210 ratio: 1.280 compilerBenchmark 273 compiled 250 ratio: 1.092 Cumulative Time 413.408 compiled 232.706 ratio 1.777
ExuperyBenchmarks>>arithmeticLoop 103ms SmallInteger>>benchmark 341ms InstructionStream>>interpretExtension:in:for: 6069ms Average 597.360
Next up dynamic inlining of entire methods. Exupery already dynamically inlines a few primitive calls.
Discussion about Exupery is here:
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/exupery
Bryce
exupery@lists.squeakfoundation.org