[Haskell-cafe] Re: Chameneos
Simon Marlow
simonmar at microsoft.com
Fri Jan 6 11:11:41 EST 2006
Hi Chris,
Rather than try to explain what I'm going on about, I decided to tweak
the code a bit myself. My version is about 10% faster than yours, and
doesn't use any explicit unboxery. I've put it in the wiki after your
version.
http://www.haskell.org/hawiki/ChameneosEntry
Could someone upload this to the shootout?
Cheers,
Simon
Chris Kuklewicz wrote:
> Simon Marlow wrote:
>
>>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.
>
>
> The syntax is not so pleasing, but it is consistant.
>
>
>>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 what I am seeing was well known.
>
>
>>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.
>
>
> I have never used UNPACK or -funbox-strict-fields before. I tried
> several variations -- all slower.
>
> I never declare "data Foo = Foo Color" so "Foo {-# UNPACK #-} !Color" is
> not possible right now. I do make a tuple of (Color,MVar Color) and put
> this into an MVar. Replacing this with data ID = ID {-# UNPACK #-}
> !Color !(MVar Color) has made things a bit worse.
>
>
>>Of course you do lose the ability to do pattern matching.
>
>
> Which may cause other speed issues. But I set "complement _ _ = red" to
> remove any performance hit there.
>
>
>
>>Cheers,
>> Simon
>>
>
>
> So I cannot seem to benefit form UNPACK or -funbox-strict-fields at the
> moment.
>
More information about the Haskell-Cafe
mailing list