Exupery 0.08 is nearly ready for release. This version can compile methods with blocks and super sends.
arithmaticLoopBenchmark 1398 compiled 92 ratio: 15.196 bytecodeBenchmark 2460 compiled 433 ratio: 5.681 sendBenchmark 1580 compiled 693 ratio: 2.280 doLoopsBenchmark 1084 compiled 642 ratio: 1.688 largeExplorers 485 compiled 520 ratio: 0.933 compilerBenchmark 943 compiled 853 ratio: 1.106 Cumulative Time 4853 compiled 1510 ratio: 3.213
1,166,287,015 bytecodes/sec; 16,761,970 sends/sec
There is a precompiled VM for 0.08 here: http://ftp.squeak.org/Exupery/vms/exupery-vm-0.08.tz
The current numbers are no better than before. The compiler benchmark may be able to be improved by tweaking the profiler that drives compilation. The largeExplorers benchmark spends most of it's time in a primitive doing point creation.
It should be possible to improve the compiler benchmark now by tweaking the profiler that drives compilation.
The current plan is to finish off dynamically inlined primitives next which should speed up largeExplorers. The bytecodeBenchmark currently inlines the #at: and #at:put: but this requires manually specifying the inlining. For this optimisation to be practical, it needs to be driven by dynamic type feedback.
The remaining things for a 1.0 release are: * Finish dynamically inlined primitives * Implement enough primitives to provide a nice speed improvement for normal code. * Add interrupt checking to compiled code. * More testing and debugging.
Comments?
Bryce
exupery@lists.squeakfoundation.org