Skip to content

Instantly share code, notes, and snippets.

@bens
Created December 5, 2015 12:33
Show Gist options
  • Save bens/01955aa7f47b0b1437e9 to your computer and use it in GitHub Desktop.
Save bens/01955aa7f47b0b1437e9 to your computer and use it in GitHub Desktop.
Benchmarking Data.Machine.Fanout implementations
module Main (main) where
import Control.Monad (void)
import Control.Monad.Identity
import Criterion.Main
import qualified Data.Conduit as C
import qualified Data.Conduit.Combinators as CC
import qualified Data.Conduit.List as C
import qualified Data.Machine as M
import qualified Data.Machine.Fanout as BenS
import qualified Data.Machine.FanoutAC as ACowley
import qualified Pipes as P
import qualified Pipes.Prelude as P
value :: Int
value = 1000000
drainM :: M.ProcessT Identity Int o -> ()
drainM m = runIdentity $ M.runT_ (sourceM M.~> m)
drainP :: P.Proxy () Int () a Identity () -> ()
drainP p = runIdentity $ P.runEffect $ P.for (sourceP P.>-> p) P.discard
drainC :: C.Conduit Int Identity a -> ()
drainC c = runIdentity $ (sourceC C.$= c) C.$$ C.sinkNull
drainSC :: C.Sink Int Identity b -> ()
drainSC c = runIdentity $ void $ sourceC C.$$ c
sourceM = M.enumerateFromTo 1 value
sourceC = C.enumFromTo 1 value
sourceP = P.each [1..value]
main :: IO ()
main =
defaultMain
[
let m = ([] :: [M.ProcessT Identity Int [Int]])
in bgroup "fanout 0"
[ bench "bens" $ whnf drainM (BenS.fanout m)
, bench "bens/Steps" $ whnf drainM (BenS.fanoutSteps m)
, bench "acowley" $ whnf drainM (ACowley.fanout m)
, bench "acowley/Steps" $ whnf drainM (ACowley.fanoutSteps m)
]
, let m = [M.auto (:[])]
in bgroup "fanout 1"
[ bench "bens" $ whnf drainM (BenS.fanout m)
, bench "bens/Steps" $ whnf drainM (BenS.fanoutSteps m)
, bench "acowley" $ whnf drainM (ACowley.fanout m)
, bench "acowley/Steps" $ whnf drainM (ACowley.fanoutSteps m)
]
, let m = replicate 2 (M.auto (:[]))
in bgroup "fanout 2"
[ bench "bens" $ whnf drainM (BenS.fanout m)
, bench "bens/Steps" $ whnf drainM (BenS.fanoutSteps m)
, bench "acowley" $ whnf drainM (ACowley.fanout m)
, bench "acowley/Steps" $ whnf drainM (ACowley.fanoutSteps m)
]
, let m = replicate 5 (M.auto (:[]))
in bgroup "fanout 5"
[ bench "bens" $ whnf drainM (BenS.fanout m)
, bench "bens/Steps" $ whnf drainM (BenS.fanoutSteps m)
, bench "acowley" $ whnf drainM (ACowley.fanout m)
, bench "acowley/Step" $ whnf drainM (ACowley.fanoutSteps m)
]
]
$ cabal bench
Preprocessing library machines-0.5.1...
In-place registering machines-0.5.1...
Preprocessing benchmark 'benchmarks' for machines-0.5.1...
Running 1 benchmarks...
Benchmark benchmarks: RUNNING...
benchmarking fanout 0/bens
time 114.3 ns (112.8 ns .. 116.4 ns)
0.998 R² (0.997 R² .. 1.000 R²)
mean 114.6 ns (113.4 ns .. 116.6 ns)
std dev 5.087 ns (3.473 ns .. 6.619 ns)
variance introduced by outliers: 65% (severely inflated)
benchmarking fanout 0/bens/Steps
time 187.2 ns (184.0 ns .. 191.5 ns)
0.997 R² (0.995 R² .. 0.999 R²)
mean 186.2 ns (184.1 ns .. 189.9 ns)
std dev 9.070 ns (5.962 ns .. 14.32 ns)
variance introduced by outliers: 69% (severely inflated)
benchmarking fanout 0/acowley
time 115.9 ns (113.8 ns .. 118.3 ns)
0.997 R² (0.996 R² .. 0.999 R²)
mean 116.1 ns (114.5 ns .. 118.0 ns)
std dev 5.796 ns (4.570 ns .. 7.073 ns)
variance introduced by outliers: 70% (severely inflated)
benchmarking fanout 0/acowley/Steps
time 113.9 ns (112.8 ns .. 115.6 ns)
0.996 R² (0.992 R² .. 0.999 R²)
mean 117.5 ns (115.3 ns .. 121.6 ns)
std dev 10.03 ns (6.737 ns .. 15.14 ns)
variance introduced by outliers: 88% (severely inflated)
benchmarking fanout 1/bens
time 389.5 ms (255.6 ms .. 506.8 ms)
0.986 R² (0.949 R² .. 1.000 R²)
mean 394.3 ms (380.0 ms .. 408.4 ms)
std dev 24.23 ms (0.0 s .. 24.40 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 1/bens/Steps
time 323.8 ms (296.4 ms .. 346.1 ms)
0.998 R² (0.993 R² .. 1.000 R²)
mean 324.1 ms (317.4 ms .. 329.0 ms)
std dev 6.669 ms (3.322 ms .. 9.101 ms)
variance introduced by outliers: 16% (moderately inflated)
benchmarking fanout 1/acowley
time 989.2 ms (920.2 ms .. 1.058 s)
0.999 R² (0.999 R² .. 1.000 R²)
mean 998.9 ms (982.6 ms .. 1.008 s)
std dev 14.55 ms (0.0 s .. 16.18 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 1/acowley/Steps
time 971.2 ms (905.5 ms .. 1.003 s)
0.999 R² (0.999 R² .. 1.000 R²)
mean 946.6 ms (926.6 ms .. 958.8 ms)
std dev 18.52 ms (0.0 s .. 21.13 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 2/bens
time 512.1 ms (NaN s .. 523.9 ms)
1.000 R² (1.000 R² .. 1.000 R²)
mean 501.3 ms (494.2 ms .. 505.2 ms)
std dev 6.227 ms (0.0 s .. 6.638 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 2/bens/Steps
time 461.4 ms (404.0 ms .. 527.5 ms)
0.998 R² (0.991 R² .. 1.000 R²)
mean 475.8 ms (465.1 ms .. 486.0 ms)
std dev 17.15 ms (0.0 s .. 17.62 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 2/acowley
time 1.412 s (1.226 s .. 1.626 s)
0.996 R² (0.995 R² .. 1.000 R²)
mean 1.458 s (1.405 s .. 1.490 s)
std dev 48.98 ms (0.0 s .. 56.06 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 2/acowley/Steps
time 1.413 s (1.330 s .. 1.507 s)
0.999 R² (0.999 R² .. 1.000 R²)
mean 1.395 s (1.379 s .. 1.408 s)
std dev 20.24 ms (0.0 s .. 22.28 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 5/bens
time 855.4 ms (787.3 ms .. 900.7 ms)
0.999 R² (0.999 R² .. 1.000 R²)
mean 854.9 ms (844.0 ms .. 861.2 ms)
std dev 9.807 ms (0.0 s .. 10.90 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 5/bens/Steps
time 822.4 ms (743.9 ms .. 945.3 ms)
0.997 R² (0.996 R² .. 1.000 R²)
mean 799.9 ms (786.1 ms .. 813.4 ms)
std dev 23.13 ms (0.0 s .. 23.41 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 5/acowley
time 2.455 s (2.410 s .. 2.514 s)
1.000 R² (1.000 R² .. 1.000 R²)
mean 2.407 s (2.394 s .. 2.419 s)
std dev 18.33 ms (0.0 s .. 19.66 ms)
variance introduced by outliers: 19% (moderately inflated)
benchmarking fanout 5/acowley/Step
time 2.454 s (2.114 s .. 2.757 s)
0.998 R² (0.991 R² .. 1.000 R²)
mean 2.482 s (2.404 s .. 2.530 s)
std dev 72.97 ms (0.0 s .. 83.59 ms)
variance introduced by outliers: 19% (moderately inflated)
Benchmark benchmarks: FINISH
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment