{-# LANGUAGE TypeApplications #-} module Main where import Criterion import Criterion.Main import qualified Numeric.AD as AD import qualified Numeric.ADDual as ADD import Numeric.ADDual.Examples main :: IO () main = defaultMain [env (pure (makeNeuralInput 100)) $ \input -> bgroup "neural-100" [bench "dual" $ nf (\inp -> ADD.gradient' @Double fneural inp 1.0) input ,bench "ad" $ nf (\inp -> AD.grad fneural inp) input] ,env (pure (makeNeuralInput 500)) $ \input -> bgroup "neural-500" [bench "dual" $ nf (\inp -> ADD.gradient' @Double fneural inp 1.0) input ,bench "ad" $ nf (\inp -> AD.grad fneural inp) input] ,env (pure (makeNeuralInput 2000)) $ \input -> bgroup "neural-2000" [bench "dual" $ nf (\inp -> ADD.gradient' @Double fneural inp 1.0) input ,bench "ad" $ nf (\inp -> AD.grad fneural inp) input] ]