[Haskell-cafe] Re: Chameneos

Simon Marlow simonmar at microsoft.com
Fri Jan 6 06:14:43 EST 2006


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



More information about the Haskell-Cafe mailing list