-
-
Notifications
You must be signed in to change notification settings - Fork 243
Closed
Description
Hello, I'm observing very strange and large memory allocations while solving a standard ODE and evaluating it at given times. However, after the first benchmark, if (and only if!) I recompile the integrated function these allocations disappear.
The function I'm integrating is:
@inbounds function dyn!(du::Vector{Float64}, u::Vector{Float64},
p, t::Float64)
du[1] =- u[1]
du[2] = -u[2]
du[3] = -u[3]
nothing
endwhile test is the function that evaluates the solution at the given times:
import DifferentialEquations: Vern9, ODEProblem, solve
function test(x::Vector{Float64}, tms::Vector{Float64})
user_prob = ODEProblem(dyn!, x, [0., 86400])
user_sol = solve(user_prob, Vern9(), abstol=1e-10, reltol=1e-9, saveat=tms, save_everystep=false).u
return user_sol
endCalling it with:
x = [3., 5., 10];
tms = collect(LinRange(0., 86400., 86400));
using BenchmarkTools
@benchmark test($x, $tms)yields:
BenchmarkTools.Trial: 30 samples with 1 evaluation.
Range (min … max): 129.553 ms … 535.830 ms ┊ GC (min … max): 11.32% … 74.42%
Time (median): 151.338 ms ┊ GC (median): 14.82%
Time (mean ± σ): 167.691 ms ± 71.469 ms ┊ GC (mean ± σ): 21.46% ± 11.46%
██
▆▇██▆▁▆▁▆▄▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄ ▁
130 ms Histogram: frequency by time 536 ms <
Memory estimate: 304.61 MiB, allocs estimate: 432505.If i recompile dyn! the new benchmark is:
BenchmarkTools.Trial: 81 samples with 1 evaluation.
Range (min … max): 49.294 ms … 106.972 ms ┊ GC (min … max): 0.00% … 0.00%
Time (median): 59.441 ms ┊ GC (median): 0.00%
Time (mean ± σ): 62.334 ms ± 12.016 ms ┊ GC (mean ± σ): 2.41% ± 4.19%
█ ▁ ▁▁ ▃
█▆█▇▄▇▇██▇▆▇▇█▁▇▆▆▆▆▄▆▆▆▄▄▁▁▄▁▁▆▆▁▁▁▄▁▁▁▁▁▁▁▆▁▁▄▁▄▄▁▁▁▁▁▁▁▁▄ ▁
49.3 ms Histogram: frequency by time 98.8 ms <
Memory estimate: 17.22 MiB, allocs estimate: 173311.Any idea what's happening? I see the Garbage Collector is taking quite a lot of time
Metadata
Metadata
Assignees
Labels
No labels