Is it worth releasing now?

bryce at kampjes.demon.co.uk bryce at kampjes.demon.co.uk
Sun Oct 22 14:43:26 UTC 2006


Exupery now produces a noticeable speed improvement for the compiler
benchmark. This is the bytecode compiler. I'm now going to work on
reliability. It's probably more reliable now than the last release.

arithmaticLoopBenchmark 1395 compiled   92 ratio: 15.163
bytecodeBenchmark       2131 compiled  457 ratio:  4.663
sendBenchmark           1588 compiled  697 ratio:  2.278
doLoopsBenchmark        1088 compiled  657 ratio:  1.656
largeExplorers           326 compiled  359 ratio:  0.908
compilerBenchmark        727 compiled  699 ratio:  1.040
========================================================
Cumulative Time         4140 compiled 1370 ratio   3.022

The two most interesting benchmarks are largeExplorers and the
compilerBenchmark. largeExplorers opens a large explorer window, it's
an example of slow Morphic behavior.  They are the two real world
benchmarks, both purely use profiling to drive compilation, and both
are real applications. The other benchmarks are micro benchmarks.

The gains to compilerBenchmark are obtained by spending only 5% of the
time in compiled code and it's support routines. The gains should be
able to be improved by both better profiling and tuning. 

largeExplorers calls #@ frequently to construct points. This is a normal
Slang primitive for native code but the interpreter inlines it into a
special bytecode. Writing Exupery intermediate versions of #@ and #new
would allow Exupery to generate optimal code for object creation that
will be inlined by the primitive inlining system. 

The decision is whether to release as soon as all known testable
quality problems are fixed or to implement #new and #@ before
releasing. Releasing is quick on my side. The current development code
includes Andy's changes to allow Exupery VMs to be built on Windows.

Bryce
P.S.
Tony, the bug we were looking at on Saturday is now fixed. It was
caused by an accidental indirect recursion consuming all the C stack.
The change to newNativeMethod stopped exuperyBlock:Value: from
realizing that it was called from compiled code so it called compiled
code directly instead of setting newNativeMethod and returning.



More information about the Exupery mailing list