public
Created

Full code for stackoverflow question http://stackoverflow.com/q/16205086/128583.

  • Download Gist
Compile line -O2 optional
1
ghc -fforce-recomp --make Main.hs -rtsopts -O2
With -O2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
$ ./Main +RTS -K200M -RTS
warming up
estimating clock resolution...
mean is 1.764828 us (320001 iterations)
found 4533 outliers among 319999 samples (1.4%)
2910 (0.9%) high severe
estimating cost of a clock call...
mean is 47.78672 ns (12 iterations)
 
benchmarking Prelude Length
collecting 100 samples, 1 iterations each, in estimated 11.64012 s
mean: 5.259745 ms, lb 5.223572 ms, ub 5.307336 ms, ci 0.950
std dev: 211.0929 us, lb 168.2398 us, ub 311.2242 us, ci 0.950
found 2 outliers among 100 samples (2.0%)
1 (1.0%) high severe
variance introduced by outliers: 37.525%
variance is moderately inflated by outliers
 
benchmarking myLength1
mean: 12.88293 ms, lb 12.76815 ms, ub 13.08463 ms, ci 0.950
std dev: 753.5147 us, lb 499.0208 us, ub 1.317084 ms, ci 0.950
found 3 outliers among 100 samples (3.0%)
3 (3.0%) high severe
variance introduced by outliers: 56.464%
variance is severely inflated by outliers
 
benchmarking myLength2
mean: 5.202620 ms, lb 5.166745 ms, ub 5.249734 ms, ci 0.950
std dev: 209.9635 us, lb 169.0609 us, ub 289.0847 us, ci 0.950
found 6 outliers among 100 samples (6.0%)
5 (5.0%) high mild
1 (1.0%) high severe
variance introduced by outliers: 37.541%
variance is moderately inflated by outliers
 
benchmarking myLength3
mean: 5.639372 ms, lb 5.432358 ms, ub 6.329498 ms, ci 0.950
std dev: 1.723670 ms, lb 557.8348 us, ub 3.835811 ms, ci 0.950
found 8 outliers among 100 samples (8.0%)
2 (2.0%) high mild
6 (6.0%) high severe
variance introduced by outliers: 97.839%
variance is severely inflated by outliers
With out -O2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
$ ./Main +RTS -K200M -RTS
warming up
estimating clock resolution...
mean is 2.144997 us (320001 iterations)
found 2666 outliers among 319999 samples (0.8%)
2112 (0.7%) high severe
estimating cost of a clock call...
mean is 45.13869 ns (17 iterations)
found 1 outliers among 17 samples (5.9%)
1 (5.9%) high mild
 
benchmarking Prelude Length
collecting 100 samples, 1 iterations each, in estimated 13.21990 s
mean: 5.481868 ms, lb 5.442965 ms, ub 5.523074 ms, ci 0.950
std dev: 204.9174 us, lb 180.9730 us, ub 235.3237 us, ci 0.950
variance introduced by outliers: 33.630%
variance is moderately inflated by outliers
 
benchmarking myLength1
collecting 100 samples, 1 iterations each, in estimated 27.31569 s
mean: 202.1552 ms, lb 191.6589 ms, ub 214.4650 ms, ci 0.950
std dev: 58.10625 ms, lb 49.10650 ms, ub 73.54255 ms, ci 0.950
found 2 outliers among 100 samples (2.0%)
2 (2.0%) high mild
variance introduced by outliers: 97.818%
variance is severely inflated by outliers
 
benchmarking myLength2
collecting 100 samples, 1 iterations each, in estimated 32.15361 s
mean: 236.3042 ms, lb 225.4061 ms, ub 249.8233 ms, ci 0.950
std dev: 61.85220 ms, lb 50.97809 ms, ub 91.10013 ms, ci 0.950
found 1 outliers among 100 samples (1.0%)
variance introduced by outliers: 96.785%
variance is severely inflated by outliers
 
benchmarking myLength3
collecting 100 samples, 1 iterations each, in estimated 12.35778 s
mean: 5.363071 ms, lb 5.294631 ms, ub 5.577624 ms, ci 0.950
std dev: 563.9155 us, lb 211.5998 us, ub 1.243479 ms, ci 0.950
found 4 outliers among 100 samples (4.0%)
3 (3.0%) high severe
variance introduced by outliers: 81.050%
variance is severely inflated by outliers
gistfile1.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
{-# LANGUAGE MagicHash #-}
import GHC.Base
import Criterion
import Criterion.Main
myLength1 :: [a] -> Int
myLength1 [] = 0
myLength1 (x:xs) = 1 + myLength1 xs
myLength2 :: [a] -> Int
myLength2 lst = len lst 0
where
len :: [a] -> Int -> Int
len [] n = n
len (_:xs) n = len xs (n+1)
myLength3 :: [a] -> Int
myLength3 l = len l 0#
where
len :: [a] -> Int# -> Int
len [] a# = I# a#
len (_:xs) a# = len xs (a# +# 1#)
main = do
let getList () = [1..10^6] :: [Int]
defaultMain [
bench "Prelude Length" $ nf length (getList ())
, bench "myLength1" $ nf myLength1 (getList ())
, bench "myLength2" $ nf myLength2 (getList ())
, bench "myLength3" $ nf myLength3 (getList ())
]

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.