@ChrisRackauckas Good work on your part!
I tried your changes and removing view and running the solver once before the timing loop has made a difference. Seems like to match compiled code, the lesson is stay away from array slicing as much as possible and compile before hand by running the same code once (which may not be possible in more realistic scenarios where initial conditions are changing between the runs). On my computer:
Before
DOPRI5: 1.43511e+01, 1.71222e+00
DP5: 6.35068e+00, 1.71606e+00
TSIT5: 7.22626e+00, 7.33951e-02
DOP853: 4.05822e+00, 7.84506e-01
DP8: 3.58036e+00, 6.66641e-01
Vern6: 5.21433e+00, 3.99717e-01
Vern9: 4.98851e+00, 5.92027e-02
DDEABM: 8.01595e+00, 2.16018e+00
After
DOPRI5: 1.22066e+01, 1.71222e+00 (2.19 s)
DP5: 3.78245e+00, 1.71606e+00 (-do-)
TSIT5: 4.48538e+00, 7.33951e-02 (-do-)
DOP853: 3.16085e+00, 7.84506e-01 (0.734 s)
DP8: 9.13293e-01, 6.66641e-01 (-do-)
Vern6: 2.52114e+00, 3.99717e-01 (2.06 s)
Vern9: 9.01457e-01, 5.92027e-02 (0.984 s) *
DDEABM: 7.53781e+00, 2.16018e+00
(I can’t find out how to run Flint on my computer: would you be willing to make a Julia wrapper? It would be nice to benchmark it!)
The travis file on github has all the command that can be replicated to compile and run FLINT on Linux/Win. You only need cmake and gfortran.
A wrapper in Julia and Python is actually in my plans. FLINT is fairly a new code and needs to be tested thoroughly, which is my priority at this time.
I did not have garbage collection command in my original script, so adding GC() between the runs and even outside the loop made it a lot slower in my trials.
For static arrays, I got this warning while running DOPRI5. You may want to look at it. (I am using kernel 1.2.0)
@ ODEInterfaceDiffEq C:\Users\bmahajan.julia\packages\ODEInterfaceDiffEq\ZJ8z2\src\solve.jl:169
┌ Warning: Interrupted. Larger maxiters is needed.
└ @ ODEInterfaceDiffEq