On Monday 11 August 2008 16:10:24 luben karavelov wrote:
> What confuses me a lot is that r30125 change to core.ops just replaces
> "string_from_literal" with "const_string" on one line. I thought that
> const_string is faster because it doesn't need to allocate memory and
> produces less garbage. But it happens that it is a lot slower - it adds
> 11 seconds to the execution (with GC enabled).
You're not kidding. I ran both through callgrind. Here's without r30125:
Events : Ir
I refs: 27,538,484,782
real 17m7.770s
user 17m0.520s
sys 0m3.912s
... and with:
Events : Ir
I refs: 42,179,373,817
real 26m9.798s
user 26m1.038s
sys 0m6.224s
I hacked up an unclean way to make CONST_STRING work in core.ops, and it was a
few thousand cycles faster than the const_string version. That's disturbing,
and well worth someone exploring for an explanation. I've put up the
relevant callgrind.out files for anyone who wants to poke around with
callgrind or kcachegrind.
http://www.wgz.org/chromatic/tmp/fib_string_from_literal.bz2
http://www.wgz.org/chromatic/tmp/fib_const_string.bz2
-- c