Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,649 changes: 1,570 additions & 1,079 deletions benchmarks/AdaptiveSDE/Manifest.toml

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion benchmarks/AdaptiveSDE/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
SDEProblemLibrary = "c72e72a9-a271-4b2b-8966-303ed956772e"
SciMLBenchmarks = "31c91b34-3c75-11e9-0341-95557aab0344"
SciMLLogging = "a6db7da4-7206-11f0-1eab-35f2a5dbe1d1"
StochasticDiffEq = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0"

[compat]
Expand All @@ -14,4 +15,5 @@ ParallelDataTransfer = "0.5"
Plots = "1.4"
SDEProblemLibrary = "0.1, 1"
SciMLBenchmarks = "0.1"
StochasticDiffEq = "6.23"
SciMLLogging = "1, 2"
StochasticDiffEq = "7"
3 changes: 2 additions & 1 deletion benchmarks/AdaptiveSDE/qmaxDetermination.jmd
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ means = Array{Float64}(undef, length(qs), 4)

using StochasticDiffEq, SDEProblemLibrary, Random,
Plots, ParallelDataTransfer, DiffEqMonteCarlo, Distributed
using SciMLLogging
Random.seed!(99)

full_prob = SDEProblemLibrary.oval2ModelExample(largeFluctuations = true, useBigs = false)
Expand Down Expand Up @@ -41,7 +42,7 @@ println("Setup Complete")

function runAdaptive(i, k)
sol = solve(prob, SRIW1(), dt = 1/2^(8), abstol = 2.0^(-15), reltol = 2.0^(-10),
verbose = false, maxIters = Int(1e12), qmax = qs[k])
verbose = SciMLLogging.None(), maxIters = Int(1e12), qmax = qs[k])
Int(any(isnan, sol[end]) || sol.t[end] != 1)
end

Expand Down
26 changes: 19 additions & 7 deletions benchmarks/AstroChem/Project.toml
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
[compat]
BenchmarkTools = "1"
Catalyst = "15"
DiffEqDevTools = "2"
Catalyst = "16"
DiffEqDevTools = "3"
LSODA = "0.7"
LinearSolve = "3"
NaNMath = "1"
ODEInterface = "0.5"
ODEInterfaceDiffEq = "3"
OrdinaryDiffEq = "6"
OrdinaryDiffEqCore = "3"
ODEInterfaceDiffEq = "4"
OrdinaryDiffEq = "7"
OrdinaryDiffEqBDF = "2"
OrdinaryDiffEqCore = "4"
OrdinaryDiffEqExtrapolation = "2"
OrdinaryDiffEqFIRK = "2"
OrdinaryDiffEqRosenbrock = "2"
OrdinaryDiffEqSDIRK = "2"
Plots = "1"
RecursiveFactorization = "0.2"
Sundials = "5"
Symbolics = "6"
SciMLLogging = "1, 2"
Sundials = "6"
Symbolics = "7"

[deps]
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
Expand All @@ -24,8 +30,14 @@ NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
ODEInterface = "54ca160b-1b9f-5127-a996-1867f4bc2a2c"
ODEInterfaceDiffEq = "09606e27-ecf5-54fc-bb29-004bd9f985bf"
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
OrdinaryDiffEqBDF = "6ad6398a-0878-4a85-9266-38940aa047c8"
OrdinaryDiffEqCore = "bbf590c4-e513-4bbe-9b18-05decba2e5d8"
OrdinaryDiffEqExtrapolation = "becaefa8-8ca2-5cf9-886d-c06f3d2bd2c4"
OrdinaryDiffEqFIRK = "5960d6e9-dd7a-4743-88e7-cf307b64f125"
OrdinaryDiffEqRosenbrock = "43230ef6-c299-4910-a778-202eb28ce4ce"
OrdinaryDiffEqSDIRK = "2d112036-d095-4a1e-ab9a-08536f3ecdbf"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
RecursiveFactorization = "f2c3362d-daeb-58d1-803e-2bc74f2840b4"
SciMLLogging = "a6db7da4-7206-11f0-1eab-35f2a5dbe1d1"
Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4"
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
6 changes: 4 additions & 2 deletions benchmarks/AstroChem/astrochem.jmd
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ author: Gijs Vermariën and Chris Rackauckas

```julia
using Catalyst
using SciMLLogging
using OrdinaryDiffEq
using OrdinaryDiffEqBDF, OrdinaryDiffEqExtrapolation, OrdinaryDiffEqFIRK, OrdinaryDiffEqRosenbrock, OrdinaryDiffEqSDIRK
using Plots
using Symbolics
using DiffEqDevTools
Expand Down Expand Up @@ -329,7 +331,7 @@ setups = [
#Dict(:alg=>ImplicitEulerBarycentricExtrapolation(min_order = 5, threading = OrdinaryDiffEqCore.PolyesterThreads())),
Dict(:alg=>ImplicitEulerBarycentricExtrapolation(min_order = 5, threading = false))
]
wp = WorkPrecisionSet(oprob, abstols, reltols, setups; verbose = false,
wp = WorkPrecisionSet(oprob, abstols, reltols, setups; verbose = SciMLLogging.None(),
save_everystep = false, appxsol = refsol, maxiters = Int(1e5), numruns = 10)
plot(wp)
```
Expand Down Expand Up @@ -420,7 +422,7 @@ setups = [
#Dict(:alg=>ImplicitEulerBarycentricExtrapolation(min_order = 5, threading = OrdinaryDiffEqCore.PolyesterThreads())),
#Dict(:alg=>ImplicitEulerBarycentricExtrapolation(min_order = 5, threading = false)),
]
wp = WorkPrecisionSet(oprob, abstols, reltols, setups; verbose = false,
wp = WorkPrecisionSet(oprob, abstols, reltols, setups; verbose = SciMLLogging.None(),
save_everystep = false, appxsol = refsol, maxiters = Int(1e5), numruns = 10,
print_names = true)
plot(wp)
Expand Down
1 change: 1 addition & 0 deletions benchmarks/AstroChem/nelson.jmd
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ author: Nina De La Torre (Advised by Stella Offner) and Chris Rackauckas

```julia
using OrdinaryDiffEq
using OrdinaryDiffEqBDF, OrdinaryDiffEqExtrapolation, OrdinaryDiffEqFIRK, OrdinaryDiffEqRosenbrock, OrdinaryDiffEqSDIRK
using DiffEqDevTools, Plots
using Sundials, LSODA
using ODEInterface, ODEInterfaceDiffEq
Expand Down
49 changes: 25 additions & 24 deletions benchmarks/AutomaticDifferentiation/BrussScaling.jmd
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ From the paper [A Comparison of Automatic Differentiation and Continuous Sensiti

```julia
using OrdinaryDiffEq, ReverseDiff, ForwardDiff, FiniteDiff, SciMLSensitivity
using OrdinaryDiffEqRosenbrock
using LinearAlgebra, Tracker, Mooncake, Plots
```

Expand Down Expand Up @@ -216,17 +217,17 @@ makebrusselator!(dict, n) = get!(()->makebrusselator(n), dict, n)
_adjoint_methods_iq = ntuple(2) do ii
Alg = (InterpolatingAdjoint, QuadratureAdjoint)[ii]
(
user = Alg(autodiff = false, autojacvec = false), # user Jacobian
adjc = Alg(autodiff = true, autojacvec = false), # AD Jacobian
advj = Alg(autodiff = true, autojacvec = EnzymeVJP()) # AD vJ
user = Alg(autodiff = AutoFiniteDiff(), autojacvec = false), # user Jacobian
adjc = Alg(autodiff = AutoForwardDiff(), autojacvec = false), # AD Jacobian
advj = Alg(autodiff = AutoForwardDiff(), autojacvec = EnzymeVJP()) # AD vJ
)
end |> NamedTuple{(:interp, :quad)}
# GaussAdjoint/GaussKronrodAdjoint do not support user-provided Jacobians (autodiff=false)
# GaussAdjoint/GaussKronrodAdjoint do not support user-provided Jacobians (autodiff=AutoFiniteDiff())
_adjoint_methods_g = ntuple(2) do ii
Alg = (GaussAdjoint, GaussKronrodAdjoint)[ii]
(
adjc = Alg(autodiff = true, autojacvec = false), # AD Jacobian
advj = Alg(autodiff = true, autojacvec = EnzymeVJP()) # AD vJ
adjc = Alg(autodiff = AutoForwardDiff(), autojacvec = false), # AD Jacobian
advj = Alg(autodiff = AutoForwardDiff(), autojacvec = EnzymeVJP()) # AD vJ
)
end |> NamedTuple{(:gauss, :gausskronrod)}
@isdefined(ADJOINT_METHODS_IQ) ||
Expand Down Expand Up @@ -275,8 +276,8 @@ end
#=
reversediff = map(reversediffn) do n
bfun, b_u0, b_p, brusselator_jac, brusselator_comp = makebrusselator!(PROBS, n)
@elapsed auto_sen_l2(bfun, b_u0, tspan, b_p, bt, (Rodas5(autodiff=false)); diffalg=(ReverseDiff.gradient), tols...)
t = @elapsed auto_sen_l2(bfun, b_u0, tspan, b_p, bt, (Rodas5(autodiff=false)); diffalg=(ReverseDiff.gradient), tols...)
@elapsed auto_sen_l2(bfun, b_u0, tspan, b_p, bt, (Rodas5(autodiff=AutoFiniteDiff())); diffalg=(ReverseDiff.gradient), tols...)
t = @elapsed auto_sen_l2(bfun, b_u0, tspan, b_p, bt, (Rodas5(autodiff=AutoFiniteDiff())); diffalg=(ReverseDiff.gradient), tols...)
@show n,t
t
end
Expand All @@ -301,7 +302,7 @@ is complete before we start timing.
```julia
let n = first(csan)
bfun, b_u0, b_p, brusselator_jac, brusselator_comp = makebrusselator!(PROBS, n)
solver = Rodas5(autodiff = false)
solver = Rodas5(autodiff = AutoFiniteDiff())
for alg in ADJOINT_METHODS_IQ
f = SciMLSensitivity.alg_autodiff(alg) ? bfun :
ODEFunction(bfun, jac = brusselator_jac)
Expand All @@ -320,7 +321,7 @@ csa_iq = map(csan) do n
@info "Running $alg"
f = SciMLSensitivity.alg_autodiff(alg) ? bfun :
ODEFunction(bfun, jac = brusselator_jac)
solver = Rodas5(autodiff = false)
solver = Rodas5(autodiff = AutoFiniteDiff())
@time diffeq_sen_l2(f, b_u0, tspan, b_p, bt, solver; sensalg = alg, tols...)
t = @elapsed diffeq_sen_l2(f, b_u0, tspan, b_p, bt, solver; sensalg = alg, tols...)
return t
Expand All @@ -335,7 +336,7 @@ csa_g = map(csan) do n
bfun, b_u0, b_p, brusselator_jac, brusselator_comp = makebrusselator!(PROBS, n)
@time ts = map(ADJOINT_METHODS_G) do alg
@info "Running $alg"
solver = Rodas5(autodiff = false)
solver = Rodas5(autodiff = AutoFiniteDiff())
@time diffeq_sen_l2(bfun, b_u0, tspan, b_p, bt, solver; sensalg = alg, tols...)
t = @elapsed diffeq_sen_l2(bfun, b_u0, tspan, b_p, bt, solver; sensalg = alg, tols...)
return t
Expand Down Expand Up @@ -398,10 +399,10 @@ tols = (abstol = 1e-5, reltol = 1e-7)
_adjoint_methods = ntuple(4) do ii
Alg = (InterpolatingAdjoint, QuadratureAdjoint, GaussAdjoint, GaussKronrodAdjoint)[ii]
(
advj1 = Alg(autodiff = true, autojacvec = EnzymeVJP()), # AD vJ (Enzyme)
advj2 = Alg(autodiff = true, autojacvec = ReverseDiffVJP(false)), # AD vJ (ReverseDiff)
advj3 = Alg(autodiff = true, autojacvec = ReverseDiffVJP(true)), # AD vJ (Compiled ReverseDiff)
advj4 = Alg(autodiff = true, autojacvec = SciMLSensitivity.MooncakeVJP()) # AD vJ (Mooncake)
advj1 = Alg(autodiff = AutoForwardDiff(), autojacvec = EnzymeVJP()), # AD vJ (Enzyme)
advj2 = Alg(autodiff = AutoForwardDiff(), autojacvec = ReverseDiffVJP(false)), # AD vJ (ReverseDiff)
advj3 = Alg(autodiff = AutoForwardDiff(), autojacvec = ReverseDiffVJP(true)), # AD vJ (Compiled ReverseDiff)
advj4 = Alg(autodiff = AutoForwardDiff(), autojacvec = SciMLSensitivity.MooncakeVJP()) # AD vJ (Mooncake)
)
end |> NamedTuple{(:interp, :quad, :gauss, :gausskronrod)}
adjoint_methods = mapreduce(collect, vcat, _adjoint_methods)
Expand All @@ -412,7 +413,7 @@ Warmup: compile all VJP backends before benchmarking.
```julia
let n = first(csan)
bfun, b_u0, b_p, brusselator_jac, brusselator_comp = makebrusselator!(PROBS, n)
solver = Rodas5(autodiff = false)
solver = Rodas5(autodiff = AutoFiniteDiff())
for alg in adjoint_methods
f = SciMLSensitivity.alg_autodiff(alg) ? bfun :
ODEFunction(bfun, jac = brusselator_jac)
Expand All @@ -428,7 +429,7 @@ csavjp = map(csan) do n
@info "Running $alg"
f = SciMLSensitivity.alg_autodiff(alg) ? bfun :
ODEFunction(bfun, jac = brusselator_jac)
solver = Rodas5(autodiff = false)
solver = Rodas5(autodiff = AutoFiniteDiff())
@time diffeq_sen_l2(f, b_u0, tspan, b_p, bt, solver; sensalg = alg, tols...)
t = @elapsed diffeq_sen_l2(f, b_u0, tspan, b_p, bt, solver; sensalg = alg, tols...)
return t
Expand Down Expand Up @@ -738,17 +739,17 @@ end
```julia
adjoint_ad_configs = [
("Interp user-Jacobian",
"InterpolatingAdjoint(autodiff = false, autojacvec = false)", true),
"InterpolatingAdjoint(autodiff = AutoFiniteDiff(), autojacvec = false)", true),
("Interp AD-Jacobian",
"InterpolatingAdjoint(autodiff = true, autojacvec = false)", false),
"InterpolatingAdjoint(autodiff = AutoForwardDiff(), autojacvec = false)", false),
("Quad user-Jacobian",
"QuadratureAdjoint(autodiff = false, autojacvec = false)", true),
"QuadratureAdjoint(autodiff = AutoFiniteDiff(), autojacvec = false)", true),
("Quad AD-Jacobian",
"QuadratureAdjoint(autodiff = true, autojacvec = false)", false),
"QuadratureAdjoint(autodiff = AutoForwardDiff(), autojacvec = false)", false),
("Gauss AD-Jacobian",
"GaussAdjoint(autodiff = true, autojacvec = false)", false),
"GaussAdjoint(autodiff = AutoForwardDiff(), autojacvec = false)", false),
("GaussKronrod AD-Jacobian",
"GaussKronrodAdjoint(autodiff = true, autojacvec = false)", false),
"GaussKronrodAdjoint(autodiff = AutoForwardDiff(), autojacvec = false)", false),
]

adjoint_ad_mem = map(adjoint_ad_configs) do (name, sensalg_str, needs_jac)
Expand All @@ -757,7 +758,7 @@ adjoint_ad_mem = map(adjoint_ad_configs) do (name, sensalg_str, needs_jac)
result = run_memory_benchmark(n, """
sensalg = $(sensalg_str)
f = $(f_expr)
solver = Rodas5(autodiff = false)
solver = Rodas5(autodiff = AutoFiniteDiff())
diffeq_sen_l2(f, b_u0, tspan, b_p, bt, solver; sensalg = sensalg, tols...)
t = @elapsed diffeq_sen_l2(f, b_u0, tspan, b_p, bt, solver;
sensalg = sensalg, tols...)
Expand Down
Loading
Loading