[Haskell-cafe] Strange GC timings

Artyom Kazak artyom.kazak at gmail.com
Sat Nov 12 20:36:04 CET 2011


The following program executes 1.5 seconds on my computer:

-----------------------CODE BEGIN-------------------------
     module Main where

     import Data.Array.IArray

     main = print (answers ! 1000000)

     nextAns :: (Int, Int, Float) -> (Int, Int, Float)
     nextAns (a, n, r) = if r2 > 1 then (a+1, n+2, r2) else (a+1, n+3, r3)
         a' = fromIntegral a
         n' = fromIntegral n
         r2 = r * (a'/(a'+1))**n' * (n'+1)*(n'+2)/(a'+1)^2
         r3 = r2 * (n'+3) / (a'+1)

     answers :: Array Int Int
     answers = listArray (1, 1000000) (map snd3 $ iterate nextAns (1, 2, 2))
       where snd3 (a, b, c) = b
------------------------CODE END--------------------------

 From these 1.5 seconds, 1 second is spent on doing GC. If I run it with  
"-A200M", it executes for only 0.5 seconds (total).

Which is more interesting, when I use UArray instead of Array, it spends  
only 0.02 seconds in GC, but total running time is still 1.5 seconds.

Why are... these things?

More information about the Haskell-Cafe mailing list