[Haskell-cafe] using Map rather than FiniteMap

Christian Maeder maeder at tzi.de
Wed Jan 26 11:09:42 EST 2005


S. Alexander Jacobson wrote:
>    zipped =zip [1..] [1..100000]::[(Int,Int)]
>    untup f (x,y) = f x y
>    produce = foldr (untup Map.insert) Map.empty zipped
>    fm = length  $ Map.keys produce
>    main = print $ fm
> 
> Has this profile:
> 
>        example +RTS -p -K5M -RTS
> 
>     total time  =        5.10 secs   (255 ticks @ 20 ms)
>     total alloc = 612,534,236 bytes  (excludes profiling overheads)
> 
>        COST CENTRE                    MODULE               %time %alloc
>     balance                        Map                   71.8   72.8
>     insert                         Map                   12.2   10.8
>     size                           Map                    9.0    9.7
>     bin                            Map                    2.4    2.2
>     rotateR                        Map                    1.6    0.3
>     zipped                         Main                   0.8    1.9

I get similar results without optimizations and much better ones using 
only about 160MB with -O.

Cheers Christian

-- unoptimized
            testMap +RTS -p -K5m -RTS

         total time  =        6.34 secs   (317 ticks @ 20 ms)
         total alloc = 612,549,684 bytes  (excludes profiling overheads)

COST CENTRE                    MODULE               %time %alloc

balance                        Common.Lib.Map        74.1   72.8
insert                         Common.Lib.Map         9.8   10.8
size                           Common.Lib.Map         9.5    9.7
bin                            Common.Lib.Map         1.6    2.2
zipped                         Main                   1.3    1.9

-- optimized results
ghc --make TestMap.hs -O -prof -auto-all  -o testMap

            testMap +RTS -p -K5m -RTS

         total time  =        1.22 secs   (61 ticks @ 20 ms)
         total alloc = 159,737,668 bytes  (excludes profiling overheads)

COST CENTRE                    MODULE               %time %alloc

insert                         Common.Lib.Map        39.3    0.5
balance                        Common.Lib.Map        24.6   47.4
size                           Common.Lib.Map        21.3   34.1
foldR                          Common.Lib.Map         3.3    2.5
zipped                         Main                   3.3    6.5
untup                          Main                   3.3    0.8
produce                        Main                   3.3    0.8
singleR                        Common.Lib.Map         1.6    0.0
toAscList                      Common.Lib.Map         0.0    1.5
single                         Common.Lib.Map         0.0    1.5
keys                           Common.Lib.Map         0.0    1.5
bin                            Common.Lib.Map         0.0    3.0


More information about the Haskell-Cafe mailing list