Order of tests in rem and friends
Roman Leshchinskiy
rl at cse.unsw.edu.au
Sun Mar 28 22:03:21 EDT 2010
I just realised that we actually have a ticket for this: http://hackage.haskell.org/trac/ghc/ticket/3065. Interestingly, that thread reports increased allocations for some nofib programs with a similar patch but I'm not seeing that any longer with 6.13. In any case, we agreed to get rid of the overflow checks altogether but I haven't had a chance to work on that yet.
Roman
On 28/03/2010, at 17:04, Roman Leshchinskiy wrote:
> Following the discussion in haskell-cafe, I tried changing the order of tests in the Integral methods from:
>
> a `rem` b
> | b == 0 = divZeroError
> | a == minBound && b == (-1) = overflowError
> | otherwise = a `remInt` b
>
> to
>
> a `rem` b
> | b == 0 = divZeroError
> | b == (-1) && a == minBound = overflowError
> | otherwise = a `remInt` b
>
> for the various Int instances in base/GHC/Real.lhs and base/GHC/Int.lhs. The nofib results are below. Would it be ok to push the patch? I suspect the runtime differences aren't significant but I can investigate if necessary.
>
> Roman
>
> --------------------------------------------------------------------------------
> Program Size Allocs Runtime Elapsed
> --------------------------------------------------------------------------------
> anna -0.1% -0.0% 0.08 0.10
> ansi -0.2% +0.0% 0.00 0.01
> atom -0.2% +0.0% 0.20 +0.0%
> awards -0.2% +0.0% 0.00 0.01
> banner -0.2% +0.0% 0.00 0.01
> bernouilli +0.0% +0.0% +0.0% -1.0%
> boyer -0.2% +0.0% 0.03 0.04
> boyer2 -0.2% +0.0% 0.00 0.01
> bspt -0.2% +0.0% 0.00 0.02
> cacheprof -0.2% +0.0% -0.5% -0.4%
> calendar -0.2% -0.1% 0.00 0.02
> cichelli +0.0% -0.0% 0.07 0.08
> circsim -0.2% +0.0% +0.3% +0.5%
> clausify +0.0% +0.0% 0.03 0.04
> comp_lab_zift -0.2% +0.0% 0.17 0.18
> compress -0.2% -0.1% 0.15 0.17
> compress2 +0.0% +0.0% 0.14 0.16
> constraints -0.2% +0.0% +0.7% +0.9%
> cryptarithm1 -0.2% +0.0% -1.1% -1.0%
> cryptarithm2 +0.0% +0.0% 0.01 0.02
> cse +0.0% +0.0% 0.00 0.01
> eliza -0.2% +0.0% 0.00 0.01
> event -0.3% -1.2% 0.13 0.14
> exp3_8 -0.2% +0.0% 0.10 0.12
> expert -0.2% +0.0% 0.00 0.02
> fem -0.2% +0.0% 0.02 0.03
> fft -0.2% -0.1% 0.03 0.04
> fft2 -0.3% +0.0% 0.06 0.07
> fibheaps -0.2% +0.0% 0.03 0.04
> fish +0.0% -4.9% 0.02 0.03
> fluid -0.2% +0.0% 0.01 0.02
> fulsom +0.0% -0.1% +4.6% +0.9%
> gamteb +0.0% -0.0% 0.07 0.09
> gcd +0.0% +0.0% 0.02 0.03
> gen_regexps +0.0% +0.0% 0.00 0.01
> genfft -0.2% +0.0% 0.03 0.04
> gg -0.2% +0.0% 0.01 0.02
> grep +0.0% +0.0% 0.00 0.01
> hidden -0.2% +0.0% -2.4% +0.9%
> hpg -0.2% +0.0% 0.19 +3.2%
> ida -0.2% +0.0% 0.09 0.10
> infer -0.4% +0.0% 0.04 0.05
> integer -0.2% +0.0% -1.0% -1.4%
> integrate -0.4% +0.0% -2.9% +0.0%
> knights -0.2% +0.0% 0.00 0.01
> lcss -0.2% +0.0% -3.8% +0.7%
> life +0.0% +0.0% 0.19 -2.9%
> lift +0.0% +0.0% 0.00 0.01
> listcompr -0.2% +0.0% 0.10 0.13
> listcopy -0.2% +0.0% 0.10 0.14
> maillist -0.2% +0.0% 0.08 +0.2%
> mandel -0.2% -0.0% 0.07 0.09
> mandel2 +0.0% -0.3% 0.01 0.02
> minimax -0.2% +0.0% 0.00 0.01
> mkhprog +0.0% +0.0% 0.00 0.01
> multiplier -0.2% +0.0% 0.09 0.11
> nucleic2 +0.0% +0.0% 0.06 0.07
> para +0.0% +0.0% -3.8% -3.2%
> paraffins -0.2% +0.0% 0.08 0.11
> parser +0.0% +0.0% 0.03 0.04
> parstof -0.2% +0.0% 0.00 0.01
> pic -0.2% -2.8% 0.00 0.02
> power +0.0% +0.0% +0.6% +0.3%
> pretty +0.0% +0.0% 0.00 0.01
> primes -0.2% +0.0% 0.05 0.06
> primetest -0.2% +0.0% +0.0% +1.9%
> prolog -0.2% +0.0% 0.00 0.01
> puzzle -0.2% +0.0% 0.15 0.16
> queens -0.2% +0.0% 0.02 0.03
> reptile -0.2% +0.0% 0.01 0.03
> rewrite -0.2% +0.0% 0.01 0.02
> rfib -0.2% +0.0% 0.05 0.06
> rsa -0.2% +0.0% 0.07 0.08
> scc -0.2% +0.0% 0.00 0.01
> sched -0.2% +0.0% 0.02 0.03
> scs +0.0% +0.0% -1.7% +1.2%
> simple -0.2% +0.0% +0.0% +2.8%
> solid -0.2% +0.0% 0.11 0.13
> sorting +0.0% +0.0% 0.00 0.01
> sphere -0.2% +0.0% 0.08 0.10
> symalg -0.2% +0.0% 0.03 0.04
> tak -0.2% +0.0% 0.01 0.02
> transform -0.2% -0.5% -0.7% -2.8%
> treejoin +0.0% +0.0% 0.20 -0.8%
> typecheck +0.0% +0.0% 0.19 0.20
> veritas -0.1% +0.0% 0.00 0.01
> wang +0.0% +0.0% 0.08 0.10
> wave4main +0.0% +0.0% +0.0% -1.3%
> wheel-sieve1 -0.2% +0.0% -4.2% -4.0%
> wheel-sieve2 -0.2% +0.0% 0.13 0.16
> x2n1 +0.0% +0.0% 0.02 0.03
> --------------------------------------------------------------------------------
> Min -0.4% -4.9% -4.2% -4.0%
> Max +0.0% +0.0% +4.6% +3.2%
> Geometric Mean -0.1% -0.1% -0.9% -0.2%
>
>
> _______________________________________________
> Cvs-ghc mailing list
> Cvs-ghc at haskell.org
> http://www.haskell.org/mailman/listinfo/cvs-ghc
More information about the Cvs-ghc
mailing list