diff --git a/benchmarks/NonStiffODE/EnrightPryce_wpd.jmd b/benchmarks/NonStiffODE/EnrightPryce_wpd.jmd index e0c68400a..268c2e19b 100644 --- a/benchmarks/NonStiffODE/EnrightPryce_wpd.jmd +++ b/benchmarks/NonStiffODE/EnrightPryce_wpd.jmd @@ -10,7 +10,7 @@ The purpose of this benchmark is to test explicit Runge-Kutta methods on the Enr ```julia using OrdinaryDiffEq, ParameterizedFunctions, ODEInterface, ODEInterfaceDiffEq, LSODA, Sundials, DiffEqDevTools, - StaticArrays + StaticArrays, OrdinaryDiffEqSIMDRK using Plots gr() @@ -21,17 +21,14 @@ abstols = 1.0 ./ 10.0 .^ (6:13) reltols = 1.0 ./ 10.0 .^ (3:10) ``` -### SIMD Algorithms (Currently Disabled) - -Note: The SIMD RK methods will be added once the OrdinaryDiffEqSIMDRK package is publicly available. +### SIMD Algorithms ```julia -# simdrkalgs = [ -# Dict(:alg=>MER5v2()), -# Dict(:alg=>MER6v2()), -# Dict(:alg=>RK6v4()) -# ] -simdrkalgs = [] +simdrkalgs = [ + Dict(:alg=>MER5v2()), + Dict(:alg=>MER6v2()), + Dict(:alg=>RK6v4()) +] ``` ### Low Order Setup diff --git a/benchmarks/NonStiffODE/FitzhughNagumo_wpd.jmd b/benchmarks/NonStiffODE/FitzhughNagumo_wpd.jmd index f23e815c5..ae3a7bd1b 100644 --- a/benchmarks/NonStiffODE/FitzhughNagumo_wpd.jmd +++ b/benchmarks/NonStiffODE/FitzhughNagumo_wpd.jmd @@ -10,7 +10,7 @@ The purpose of this is to see how the errors scale on a standard nonlinear probl ```julia using OrdinaryDiffEq, ParameterizedFunctions, ODEInterface, ODEInterfaceDiffEq, LSODA, Sundials, DiffEqDevTools, - StaticArrays + StaticArrays, OrdinaryDiffEqSIMDRK using Plots; gr() @@ -46,7 +46,10 @@ setups = [Dict(:alg=>DP5()) Dict(:alg=>Tsit5()) Dict(:alg=>Vern6()) Dict(:alg=>Tsit5(), :prob_choice => 2) - Dict(:alg=>Vern6(), :prob_choice => 2)] + Dict(:alg=>Vern6(), :prob_choice => 2) + Dict(:alg=>MER5v2(), :prob_choice => 2) + Dict(:alg=>MER6v2(), :prob_choice => 2) + Dict(:alg=>RK6v4(), :prob_choice => 2)] wp = WorkPrecisionSet(probs, abstols, reltols, setups; appxsol = test_sol, save_everystep = false, numruns = 100, maxiters = 1000) plot(wp) diff --git a/benchmarks/NonStiffODE/LotkaVolterra_wpd.jmd b/benchmarks/NonStiffODE/LotkaVolterra_wpd.jmd index d1579e2b8..cd06ec4d6 100644 --- a/benchmarks/NonStiffODE/LotkaVolterra_wpd.jmd +++ b/benchmarks/NonStiffODE/LotkaVolterra_wpd.jmd @@ -9,7 +9,7 @@ The purpose of this problem is to test the performance on easy problems. Since i ```julia using OrdinaryDiffEq, ParameterizedFunctions, ODEInterfaceDiffEq, LSODA, - Sundials, DiffEqDevTools, StaticArrays + Sundials, DiffEqDevTools, StaticArrays, OrdinaryDiffEqSIMDRK f = @ode_def LotkaVolterra begin dx = a*x - b*x*y @@ -43,7 +43,10 @@ setups = [Dict(:alg=>DP5()) Dict(:alg=>Tsit5()) Dict(:alg=>Vern6()) Dict(:alg=>Tsit5(), :prob_choice => 2) - Dict(:alg=>Vern6(), :prob_choice => 2)] + Dict(:alg=>Vern6(), :prob_choice => 2) + Dict(:alg=>MER5v2(), :prob_choice => 2) + Dict(:alg=>MER6v2(), :prob_choice => 2) + Dict(:alg=>RK6v4(), :prob_choice => 2)] wp = WorkPrecisionSet(probs, abstols, reltols, setups; appxsol = test_sol, save_everystep = false, maxiters = 10000, numruns = 100) plot(wp) diff --git a/benchmarks/NonStiffODE/Manifest.toml b/benchmarks/NonStiffODE/Manifest.toml index aaa3dd017..4124bc1d1 100644 --- a/benchmarks/NonStiffODE/Manifest.toml +++ b/benchmarks/NonStiffODE/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.10.10" manifest_format = "2.0" -project_hash = "65282984342ab67ee881191028a5586e6f0b8834" +project_hash = "fedc28d1f200e9777f20b0ae68e6b540ef1f551b" [[deps.ADTypes]] git-tree-sha1 = "60665b326b75db6517939d0e1875850bc4a54368" @@ -367,10 +367,10 @@ uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "ConcreteStructs", "DataStructures", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "TruncatedStacktraces"] -git-tree-sha1 = "1b1e070e57681d1176d99a5ec455717e24686612" +deps = ["ArrayInterface", "ConcreteStructs", "DocStringExtensions", "EnzymeCore", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "529087a10b502502201c7bf4e8769e40d7c15a17" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.183.2" +version = "6.184.0" [deps.DiffEqBase.extensions] DiffEqBaseCUDAExt = "CUDA" @@ -560,9 +560,9 @@ version = "1.6.0" [[deps.DynamicPolynomials]] deps = ["Future", "LinearAlgebra", "MultivariatePolynomials", "MutableArithmetics", "Reexport", "Test"] -git-tree-sha1 = "98c4bb95af37e5d980129261fdd6dab0392c6607" +git-tree-sha1 = "ca693f8707a77a0e365d49fe4622203b72b6cf1d" uuid = "7c1d4256-1411-5781-91ec-d7bc3513ac07" -version = "0.6.2" +version = "0.6.3" [[deps.DynamicQuantities]] deps = ["DispatchDoctor", "PrecompileTools", "TestItems", "Tricks"] @@ -884,6 +884,12 @@ git-tree-sha1 = "9e13b8d8b1367d9692a90ea4711b4278e4755c32" uuid = "eafb193a-b7ab-5a9e-9068-77385905fa72" version = "0.5.3" +[[deps.HostCPUFeatures]] +deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] +git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" +uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" +version = "0.1.17" + [[deps.HypergeometricFunctions]] deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" @@ -892,9 +898,9 @@ version = "0.3.28" [[deps.IJulia]] deps = ["Base64", "Conda", "Dates", "InteractiveUtils", "JSON", "Logging", "Markdown", "Pkg", "PrecompileTools", "Printf", "REPL", "Random", "SHA", "Sockets", "UUIDs", "ZMQ"] -git-tree-sha1 = "2004107fe26a14a37c7bd9b51c006809b177b913" +git-tree-sha1 = "66b1f8d8b870814a079da381dd20416c53e73839" uuid = "7073ff75-c697-5162-941a-fcdaad2a7d2a" -version = "1.30.0" +version = "1.30.1" [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" @@ -1728,6 +1734,12 @@ git-tree-sha1 = "6b941dba1c669f8dbb24faf951e5ec8665ff5019" uuid = "2d112036-d095-4a1e-ab9a-08536f3ecdbf" version = "1.6.0" +[[deps.OrdinaryDiffEqSIMDRK]] +deps = ["MuladdMacro", "OrdinaryDiffEqCore", "Reexport", "SLEEFPirates", "Static", "UnPack", "VectorizationBase"] +git-tree-sha1 = "fb521b8b352d534b7ac2558e8ffda9e2d3378090" +uuid = "dc97f408-7a72-40e4-9b0d-228a53b292f8" +version = "1.1.0" + [[deps.OrdinaryDiffEqSSPRK]] deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static", "StaticArrays"] git-tree-sha1 = "af955c61407631d281dd4c2e8331cdfea1af49be" @@ -2075,11 +2087,17 @@ git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" uuid = "94e857df-77ce-4151-89e5-788b33177be4" version = "0.1.0" +[[deps.SLEEFPirates]] +deps = ["IfElse", "Static", "VectorizationBase"] +git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" +uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" +version = "0.6.43" + [[deps.SciMLBase]] deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "Moshi", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] -git-tree-sha1 = "a06d451a6d0fa6e6da34d047d61af8beb187b0f1" +git-tree-sha1 = "33786c33502a6652fba239d3062ccc5e4cdd30c4" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.112.0" +version = "2.114.0" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" @@ -2561,6 +2579,12 @@ git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" version = "0.2.0" +[[deps.VectorizationBase]] +deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "4ab62a49f1d8d9548a1c8d1a75e5f55cf196f64e" +uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" +version = "0.21.71" + [[deps.VersionParsing]] git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" diff --git a/benchmarks/NonStiffODE/Project.toml b/benchmarks/NonStiffODE/Project.toml index d5db46b32..09c989e32 100644 --- a/benchmarks/NonStiffODE/Project.toml +++ b/benchmarks/NonStiffODE/Project.toml @@ -2,12 +2,13 @@ DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" DiffEqDevTools = "f3b72e0c-5b89-59e1-b016-84e28bfd966d" IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" -LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" LSODA = "7f56f5a3-f504-529b-bc02-0b1fe5e64312" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78" ODEInterface = "54ca160b-1b9f-5127-a996-1867f4bc2a2c" ODEInterfaceDiffEq = "09606e27-ecf5-54fc-bb29-004bd9f985bf" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +OrdinaryDiffEqSIMDRK = "dc97f408-7a72-40e4-9b0d-228a53b292f8" ParameterizedFunctions = "65888b18-ceab-5e60-b2b9-181511a3b968" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" @@ -24,7 +25,7 @@ LSODA = "0.7" ModelingToolkit = "9" ODEInterface = "0.5" ODEInterfaceDiffEq = "3.10" -OrdinaryDiffEq = "6.19" +OrdinaryDiffEq = "6" ParameterizedFunctions = "5.3" Plots = "1.4" SciMLBenchmarks = "0.1" diff --git a/benchmarks/NonStiffODE/RigidBody_wpd.jmd b/benchmarks/NonStiffODE/RigidBody_wpd.jmd index ea1925bca..b9814b637 100644 --- a/benchmarks/NonStiffODE/RigidBody_wpd.jmd +++ b/benchmarks/NonStiffODE/RigidBody_wpd.jmd @@ -5,7 +5,7 @@ author: Chris Rackauckas ```julia using OrdinaryDiffEq, ParameterizedFunctions, ODEInterfaceDiffEq, LSODA, - Sundials, DiffEqDevTools, StaticArrays + Sundials, DiffEqDevTools, StaticArrays, OrdinaryDiffEqSIMDRK k(t) = 0.25*sin(t)^2 @@ -40,7 +40,10 @@ setups = [Dict(:alg=>DP5()) Dict(:alg=>Tsit5()) Dict(:alg=>Vern6()) Dict(:alg=>Tsit5(), :prob_choice => 2) - Dict(:alg=>Vern6(), :prob_choice => 2)] + Dict(:alg=>Vern6(), :prob_choice => 2) + Dict(:alg=>MER5v2(), :prob_choice => 2) + Dict(:alg=>MER6v2(), :prob_choice => 2) + Dict(:alg=>RK6v4(), :prob_choice => 2)] wp = WorkPrecisionSet(probs, abstols, reltols, setups; appxsol = test_sol, save_everystep = true, numruns = 100, maxiters = 10000) plot(wp) diff --git a/benchmarks/NonStiffODE/linear_wpd.jmd b/benchmarks/NonStiffODE/linear_wpd.jmd index 977636ffa..17a1d67a3 100644 --- a/benchmarks/NonStiffODE/linear_wpd.jmd +++ b/benchmarks/NonStiffODE/linear_wpd.jmd @@ -23,7 +23,7 @@ rapid development has its advantages. ## Setup ```julia -using OrdinaryDiffEq, Sundials, DiffEqDevTools, Plots, ODEInterfaceDiffEq, LSODA +using OrdinaryDiffEq, Sundials, DiffEqDevTools, Plots, ODEInterfaceDiffEq, LSODA, OrdinaryDiffEqSIMDRK using Random Random.seed!(123) gr() @@ -56,9 +56,12 @@ setups = [Dict(:alg=>DP5()) Dict(:alg=>ode45()) Dict(:alg=>dopri5()) Dict(:alg=>ARKODE(Sundials.Explicit(), etable = Sundials.DORMAND_PRINCE_7_4_5)) - Dict(:alg=>Tsit5())] + Dict(:alg=>Tsit5()) + Dict(:alg=>MER5v2()) + Dict(:alg=>MER6v2()) + Dict(:alg=>RK6v4())] solnames = ["OrdinaryDiffEq"; "ODE"; "ODEInterface"; "Sundials ARKODE"; - "OrdinaryDiffEq Tsit5"] + "OrdinaryDiffEq Tsit5"; "MER5v2"; "MER6v2"; "RK6v4"] wp = WorkPrecisionSet( prob, abstols, reltols, setups; names = solnames, save_everystep = false, numruns = 100) plot(wp)