[MLton] ref flattening

Daniel C. Wang danwang@CS.Princeton.EDU
Wed, 07 Jul 2004 16:00:27 -0400

Back a long time ago when I was hacking on the code for the programming 
language shootout. I turned a very ref heavy version of the statistical 
moments benchmark into a purely functional version. I was hoping to improve 
the performance by letting the compiler place record unboxed into the 
machine registers and avoid the overhead of refs. I remember getting a small 
enough improvement to submit the change.

Now with the ref flattening code. I'm wondering if it's better to go back to 
the old imperative looking version of statical moments that looks more like 
the ocaml code.

Here's the benchmark I'm referring too.


Anyway, might be an interesting micro-benchmark to add to the current suite.
BTW perhaps we can convince the new benchmark maintainers to include an md5 
benchmark. :) That will really help show off mlton. I'm sure everyone is 
very pleased that mlton is second only to gcc right now with the default 
score card ranking. I'm sure an md5 benchmark will give mlton an edge.. and 
of course it is a realistic kind of thing to do. :)

Stephen Weeks wrote:

> I am pleased to report progress on the ref flattening optimization.  I
> have checked in code that now passes all the regressions and the
> benchmarks.   It does not yet self compile.  Here are the run time
> ratios for the benchmarks run "{-drop-pass refFlatten,}".  I've only
> included ratios that differ by more that 0.03 from 1.
> MLton0 -- mlton -drop-pass refFlatten
> MLton1 -- mlton 
> run time ratio
> benchmark         MLton1
> barnes-hut          0.84
> boyer               0.78
> fib                 0.94
> knuth-bendix        0.91
> lexgen              1.28
> logic               0.94
> matrix-multiply     1.05
> mlyacc              1.10
> mpuz                0.92
> nucleic             1.30
> output1             0.80
> ratio-regions       0.95
> tsp                 0.80