mcmc-0.8.1.0: bench/Bench.hs
-- |
-- Module : Main
-- Copyright : 2021 Dominik Schrempf
-- License : GPL-3.0-or-later
--
-- Maintainer : dominik.schrempf@gmail.com
-- Stability : unstable
-- Portability : portable
--
-- Creation date: Fri May 8 17:27:03 2020.
module Main
( main,
)
where
import Criterion.Main
import Data.List
import Mcmc.Internal.SpecFunctions
import Normal
import Numeric.SpecFunctions
import Poisson
import System.Random.Stateful
gammaBenchG :: RealFloat a => (a -> a) -> [a] -> a
gammaBenchG f = foldl' (\acc x -> acc + f x) 0
{-# SPECIALIZE gammaBenchG :: (Double -> Double) -> [Double] -> Double #-}
gammaVals :: [Double]
gammaVals = [0, 0.01 .. 10000]
main :: IO ()
main = do
let g = mkStdGen 0
defaultMain
[ bgroup
"Normal"
[ bench "Slide" $ nfIO (normalSlideBench g),
bench "Bactrian" $ nfIO (normalBactrianBench g),
bench "LargeCycle" $ nfIO (normalLargeCycleBench g)
],
bgroup
"Poisson"
[ bench "Random walk" $ nfIO (poissonBench g),
bench "Hamiltonian" $ nfIO (poissonHamiltonianBench g)
],
bgroup
"MC3"
[ bench "MC3 2" $ nfIO (normalMC3 g 2),
bench "MC3 3" $ nfIO (normalMC3 g 3),
bench "MC3 4" $ nfIO (normalMC3 g 4),
bench "MC3 5" $ nfIO (normalMC3 g 5),
bench "MC3 10" $ nfIO (normalMC3 g 10)
],
bgroup
"probability"
[ bench "gamma function general" $
nf (gammaBenchG logGammaG) gammaVals,
bench "gamma function specialized" $
nf (gammaBenchG logGamma) gammaVals
]
]
-- benchmarking Normal/Slide
-- time 24.12 ms (23.52 ms .. 24.76 ms)
-- 0.997 R² (0.995 R² .. 0.999 R²)
-- mean 23.70 ms (23.44 ms .. 24.02 ms)
-- std dev 658.2 μs (448.5 μs .. 837.2 μs)
-- benchmarking Normal/Bactrian
-- time 26.65 ms (26.08 ms .. 27.26 ms)
-- 0.998 R² (0.996 R² .. 1.000 R²)
-- mean 26.53 ms (26.32 ms .. 26.91 ms)
-- std dev 626.9 μs (322.3 μs .. 1.040 ms)
-- benchmarking Normal/LargeCycle
-- time 52.48 ms (51.51 ms .. 53.83 ms)
-- 0.999 R² (0.998 R² .. 1.000 R²)
-- mean 52.54 ms (51.62 ms .. 54.90 ms)
-- std dev 2.765 ms (758.0 μs .. 4.788 ms)
-- variance introduced by outliers: 14% (moderately inflated)
-- benchmarking Poisson/Random walk
-- time 86.57 ms (86.06 ms .. 86.97 ms)
-- 1.000 R² (1.000 R² .. 1.000 R²)
-- mean 86.57 ms (86.20 ms .. 87.14 ms)
-- std dev 775.9 μs (415.4 μs .. 1.205 ms)
-- benchmarking Poisson/Hamiltonian
-- time 2.890 s (2.313 s .. 3.359 s)
-- 0.993 R² (0.992 R² .. 1.000 R²)
-- mean 3.082 s (2.960 s .. 3.153 s)
-- std dev 120.4 ms (39.93 ms .. 164.0 ms)
-- variance introduced by outliers: 19% (moderately inflated)
-- benchmarking MC3/MC3 2
-- time 7.771 ms (7.573 ms .. 8.008 ms)
-- 0.996 R² (0.993 R² .. 0.999 R²)
-- mean 7.810 ms (7.722 ms .. 7.974 ms)
-- std dev 328.3 μs (223.0 μs .. 517.6 μs)
-- variance introduced by outliers: 19% (moderately inflated)
-- benchmarking MC3/MC3 3
-- time 10.69 ms (10.57 ms .. 10.87 ms)
-- 0.997 R² (0.993 R² .. 1.000 R²)
-- mean 10.73 ms (10.65 ms .. 10.90 ms)
-- std dev 308.1 μs (132.2 μs .. 528.9 μs)
-- benchmarking MC3/MC3 4
-- time 13.81 ms (13.66 ms .. 14.08 ms)
-- 0.999 R² (0.997 R² .. 1.000 R²)
-- mean 13.73 ms (13.67 ms .. 13.85 ms)
-- std dev 213.2 μs (95.38 μs .. 334.4 μs)
-- benchmarking MC3/MC3 5
-- time 16.80 ms (16.65 ms .. 16.93 ms)
-- 0.999 R² (0.997 R² .. 1.000 R²)
-- mean 16.99 ms (16.87 ms .. 17.23 ms)
-- std dev 376.6 μs (162.3 μs .. 589.3 μs)
-- benchmarking MC3/MC3 10
-- time 32.59 ms (32.10 ms .. 33.20 ms)
-- 0.999 R² (0.998 R² .. 1.000 R²)
-- mean 32.21 ms (32.07 ms .. 32.46 ms)
-- std dev 390.9 μs (219.6 μs .. 640.0 μs)
-- benchmarking probability/gamma function general
-- time 60.73 ms (60.37 ms .. 61.26 ms)
-- 1.000 R² (1.000 R² .. 1.000 R²)
-- mean 60.70 ms (60.49 ms .. 60.91 ms)
-- std dev 385.5 μs (287.3 μs .. 513.5 μs)
-- benchmarking probability/gamma function specialized
-- time 59.00 ms (58.74 ms .. 59.32 ms)
-- 1.000 R² (1.000 R² .. 1.000 R²)
-- mean 58.83 ms (58.76 ms .. 58.97 ms)
-- std dev 168.3 μs (105.7 μs .. 245.7 μs)