
Chris Kuklewicz wrote:
Your "case" tweak was for an older version of Chameneos that used an older Ch channel implementation.
But I was inspired by your improvement to use Int# instead of data Color, and I posted a version that seems faster than the winning one that was submitted. http://www.haskell.org/hawiki/ChameneosEntry
It still has to box the Int# to put it into the MVar channels. But the fastest complement is now (3# -# a -# b) and "if (other ==# faded)" is faster than the previous "case other of Faded -> ; _ ->". At least on OS X / G4.
Also, thanks for cleaning up the SumFile code.
I'm not keen on using explicit unboxed values in these benchmarks, since it looks so ugly. In most cases you can convince GHC to do the unboxing for you, and I'm pretty sure it should be the case here too. Just use ordinary Ints. It's interesting you're getting some benefit from using integers instead of enumerations. We've known for a while that enumerations in GHC aren't optimised as well as they could be. So, at least for now, this is a useful trick: instead of data T = A | B | C write newtype T = T Int a = T 1 b = T 2 c = T 3 and then GHC will be able to unbox T in a constructor field (ie. {-# UNPACK #-} !T will work), and it will also be able to unbox T in a strict argument position. Of course you do lose the ability to do pattern matching. Cheers, Simon