[Haskell-cafe] GHC vs GCC

Thomas DuBuisson thomas.dubuisson at gmail.com
Sat Mar 27 00:56:16 EDT 2010


> Using bang patterns didn't help almost anything here. Using rem
> instead of mod made the time go from 45s to 40s. Now, using -fvia-C
> really helped (when I used rem but not using mod). It went down to
> 10s.

Bang patterns should have helped tons - it isn't GHC thats at fault
here and yes it does tco.  I attached a version w/ excessive bangs
below.  Did you compile with "ghc --make -O3 -fforce-recomp"?

Cheers,
Thomas

main = print $ rangeI 0 0

rangeK :: Int -> Int -> Int -> Int -> Int
rangeK !i !j !k !acc =
        if k < 1000
          then
               if i * i + j * j + k * k `rem` 7 == 0
               then rangeK i j (k+1) (acc+1)
               else rangeK i j (k+1) acc
           else acc

rangeJ :: Int -> Int -> Int -> Int
rangeJ !i !j !acc =
           if j < 1000
                then rangeJ i (j+1) (acc + rangeK i j 0 0)
                else acc

rangeI :: Int -> Int -> Int
rangeI !i !acc =
           if i < 1000
                then rangeI (i+1) (acc + (rangeJ i 0 0))
                else acc


More information about the Haskell-Cafe mailing list