summary of storing highly shared data structures

Christian Maeder maeder at
Wed Jan 11 15:03:53 EST 2006

Hi Bulat,

The difference between IntMap and HashTable is not large despite -A10m 
(without this option HashTable is unusable).

<<ghc: 2754665792 bytes, 287 GCs, 26495315/147911940 avg/max bytes 
residency (12 samples), 299M in use, 0.00 INIT (0.00 elapsed), 31.72 MUT 
(33.78 elapsed), 14.04 GC (17.73 elapsed) :ghc>>

<<ghc: 2705137096 bytes, 282 GCs, 30775754/176806684 avg/max bytes 
residency (12 samples), 356M in use, 0.00 INIT (0.01 elapsed), 30.35 MUT 
(31.28 elapsed), 13.64 GC (14.52 elapsed) :ghc>>

I must admit, though, that my hash function may be bad:

   data EqKey = EqKey (StableName ()) TypeRep deriving Eq

   hashKey :: EqKey -> Int32
   hashKey (EqKey p t) = HTab.hashInt (hashStableName p)

and calling " (==) hashKey". (Adding hashString on show 
<TypeRep> is worse.) A hash-function for TypeReps would be better.

But my IntMap also uses Eq on EqKey ("IntMap [(EqKey, Int)]")

Cheers Christian

Bulat Ziganshin wrote:
> Hello Christian,
> Wednesday, January 11, 2006, 5:13:25 PM, you wrote:
> CM> It turned out that the IntMap was not slower than the HashTable (What is
> CM> HashTable good for, then? Why is it so slow?)
> see the
> and the attached letter. "-A10m" should help in this case

More information about the Glasgow-haskell-users mailing list