Created
December 5, 2015 12:33
-
-
Save bens/01955aa7f47b0b1437e9 to your computer and use it in GitHub Desktop.
Benchmarking Data.Machine.Fanout implementations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
] | |
] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ 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