[squeak-dev] [ANN] Exupery 0.14 is released

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[squeak-dev] [ANN] Exupery 0.14 is released

Bryce Kampjes

The major improvement is to the speed of register allocation. I've
fixed a couple of major performance problems so register allocation
takes 50% of compilation time even for the largest methods. Register
allocation now appears to take roughly linear time.

Installation instructions are here:

 http://wiki.squeak.org/squeak/3945

There's still plenty of room to improve compilation time. Every stage
copies the entire intermediate graph to produce the input to the next
stage which is redundant, most stages only change a few places. The
register allocator's liveness analyser still uses Sets to represent
which variables are live rather than bit vectors.

This release can compile cascades, the last missing core language
feature. Exupery still can only compile a handful of the core
primitives, it only compiles #at: for pointer objects. Cascades were
added because they were used more in 3.10, the choice was either
delete 2 system tests or add cascades. I delayed the release to add
cascades.

There's a few bug fixes of old bugs but this release is not noticeably
more reliable than the previous release. It should be a bit more
reliable though, especially when running the new Exupery VM. The new
Exupery VM just has a single bug fix in it.

Here's the benchmarks:
  arithmaticLoopBenchmark 414 compiled  94 ratio: 4.404
  bytecodeBenchmark       726 compiled 264 ratio: 2.750
  sendBenchmark           707 compiled 454 ratio: 1.557
  doLoopsBenchmark        388 compiled 398 ratio: 0.975
  pointCreation           433 compiled 423 ratio: 1.024
  largeExplorers          257 compiled 258 ratio: 0.996
  compilerBenchmark       248 compiled 249 ratio: 0.996
  Cumulative Time         419 compiled 275 ratio  1.519

  ExuperyBenchmarks>>arithmeticLoop              105ms
  SmallInteger>>benchmark                        362ms
  InstructionStream>>interpretExtension:in:for: 6051ms
  Average 612.691

The key benchmark for this release is the last one, compiling
interpretExtension:in:for: which now only takes 6 seconds. With
previous version of the compiler it used to take over 2 minutes
to compile.

The change in times in the other benchmarks are mostly due to
me upgrading from an Athlon 64 2.2GHz to a Core 2 3.0GHz. The
register allocator should be slightly more efficient especially
when compiling send heavy code.

Reliability and compile time performance has dominated the
last few releases. Now run time performance and reliability are
the biggest issues. Exupery still can crash after about an hour's
active use depending on what's being done.

Bryce