-
Notifications
You must be signed in to change notification settings - Fork 36
Open
Description
test case
instModel.result.n_w_invariant = 149
instModel.nsegments = 1
length(instModel.x_start) = 17
number of result points = 5509
timing
... Timings for simulation of SMtest (without initialization):
─────────────────────────────────────────────────────────────────────────────────────────
Time Allocations
─────────────── ───────────────
Total measured: 2.50s 1.03GiB
Section ncalls time %tot alloc %tot
─────────────────────────────────────────────────────────────────────────────────────────
Modia.simulate! 1 2.40s 96.2% 0.98GiB 94.8%
DifferentialEquations.solve 1 2.40s 96.2% 0.98GiB 94.8%
Modia getDerivatives! 17.6k 2.38s 95.2% 1.03GiB 99.5%*
*Modia addToResult! 5.51k 1.55s 62.0% 0.97GiB 93.9% <<====
Modia LinearEquationsIteration! 87.8k 167ms 6.7% 4.02MiB 0.4%
Modia.init! 1 95.6ms 3.8% 55.1MiB 5.2%
Modia LinearEquationsIteration! (solve A*x=b) 52.7k 78.1ms 3.1% 4.02MiB 0.4%
Modia eventIteration! 1 91.5μs 0.0% 2.56KiB 0.0%
DifferentialEquations.ODEProblem 1 1.23μs 0.0% 0.00B 0.0%
─────────────────────────────────────────────────────────────────────────────────────────
2.498988 seconds (2.94 M allocations: 1.034 GiB, 6.49% gc time)
modified addToResult!
function addToResult!(m::SimulationModel{FloatType,TimeType}, x, time, w_invariant...)::Nothing where {FloatType,TimeType}
the result of getDerivatives
is called w_invariant
and has the type Tuple
, which is immutable. So it can be used directly (without deepcopy
) in:
# push!(result.w_invariant[end], deepcopy(w_invariant))
push!(result.w_invariant[end], w_invariant)
timing with modified addToResult!
... Timings for simulation of SMtest (without initialization):
─────────────────────────────────────────────────────────────────────────────────────────
Time Allocations
─────────────── ───────────────
Total measured: 943ms 88.5MiB
Section ncalls time %tot alloc %tot
─────────────────────────────────────────────────────────────────────────────────────────
Modia getDerivatives! 17.6k 859ms 91.2% 83.7MiB 94.6%
Modia.simulate! 1 853ms 90.6% 33.4MiB 37.8%
DifferentialEquations.solve 1 853ms 90.5% 33.3MiB 37.6%
Modia LinearEquationsIteration! 87.8k 160ms 17.0% 4.02MiB 4.5%
Modia.init! 1 88.8ms 9.4% 55.1MiB 62.2%
Modia LinearEquationsIteration! (solve A*x=b) 52.7k 74.4ms 7.9% 4.02MiB 4.5%
*Modia addToResult! 5.51k 65.5ms 6.9% 23.8MiB 26.9% <<====
Modia eventIteration! 1 85.6μs 0.0% 2.56KiB 0.0%
DifferentialEquations.ODEProblem 1 1.30μs 0.0% 0.00B 0.0%
─────────────────────────────────────────────────────────────────────────────────────────
0.944182 seconds (1.02 M allocations: 88.559 MiB)
time consumption and storage allocation was reduced dramatically
postscript
in previous Modia
versions (<=0.8.4
) the same approach was used.
function addToResult!(m::SimulationModel, variableValues...)::Nothing
push!(m.result_vars , variableValues)
push!(m.result_der_x, deepcopy(m.der_x))
return nothing
end
used versions
Modia version = "0.9.4-dev"
Julia = 1.7.1
Metadata
Metadata
Assignees
Labels
No labels