evolving - Thursday 26th June, 2003

richardc on 2003-06-27T17:35:09

Started working over the Siesta web frontend. I hate developing web stuff, but it's one of the last few things that just have to be built.

---

Remembered to release Mariachi 0.4, now with added slowness.

---

Started to think again on Devel::LeakTrace. Realised I was rampantly over-calling malloc for the most common cases and so shaved those a bit.

Timings went from:

 % time perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'
  leaked SV(0x8140de0) from -e line 1
  leaked SV(0x8140e1c) from -e line 1
  perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'  3.34s user 0.02s system 100% cpu 3.355 total

To:

 % time perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'
  leaked SV(0x8140de0) from -e line 1
  leaked SV(0x8140e1c) from -e line 1
  perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'  2.65s user 0.01s system 101% cpu 2.613 total

So a nice fat 25% speedup in a few easy steps.

Of course it's still burning way too many cycles in maintaining all the state. Compare the instant timings of an unladen perl.

 % time perl -e 'for (1..1000) {++$x}'
  perl -e 'for (1..1000) {++$x}'  0.00s user 0.00s system 0% cpu 0.000 total

Should tuits present themselves I'm going to see if Judy arrays really work well as they claim to, since they're potentially better suited for this than the existing use of GHashes.

---

Nope, Judy is slower:

 % time perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'
  leaked SV(0x8140de0) from -e line 1
  leaked SV(0x8140e1c) from -e line 1
  perl -Mblib -MDevel::LeakTrace -e 'for (1..1000) {++$x}'  4.28s user 0.01s system 100% cpu 4.278 total

That and the API is weird.