Package load time regressions in 1.12
I think this deserves a separate issue to track this.
❯ julia +nightly --project=@MTK_1.13 -e '@time using ModelingToolkit'
3.292820 seconds (8.19 M allocations: 478.546 MiB, 7.74% gc time, 4.13% compilation time: 36% of which was recompilation)
❯ julia +1.11 --project=@MTK_1.11 -e '@time using ModelingToolkit'
2.454841 seconds (5.07 M allocations: 346.203 MiB, 7.39% gc time, 3.76% compilation time: 31% of which was recompilation)
❯ julia +1.10 --project=@MTK_1.10 -e '@time using ModelingToolkit'
2.507505 seconds (4.80 M allocations: 359.739 MiB, 10.68% gc time, 2.24% compilation time: 34% of which was recompilation)
Nightly has a big bump in load time.
This seems to be worse on 1.12-nightly?
julia> VERSION
v"1.12.0-DEV.2136"
julia> @time using ModelingToolkit
3.713581 seconds (9.52 M allocations: 519.955 MiB, 8.09% gc time, 2.98% compilation time: 31% of which was recompilation)
Julia 1.12-beta2 is still looking very bad:
hyperfine 'julia +1.10 --startup-file=no -e "using KiteModels"' 'julia +1.12 --startup-file=no -e "using KiteModels"'
Benchmark 1: julia +1.10 --startup-file=no -e "using KiteModels"
Time (mean ± σ): 5.558 s ± 0.088 s [User: 5.205 s, System: 0.922 s]
Range (min … max): 5.478 s … 5.746 s 10 runs
Benchmark 2: julia +1.12 --startup-file=no -e "using KiteModels"
Time (mean ± σ): 10.003 s ± 0.050 s [User: 10.030 s, System: 0.548 s]
Range (min … max): 9.916 s … 10.074 s 10 runs
Summary
julia +1.10 --startup-file=no -e "using KiteModels" ran
1.80 ± 0.03 times faster than julia +1.12 --startup-file=no -e "using KiteModels"
Small improvement with Julia 1.12-beta3:
ufechner@ufryzen:~$ hyperfine 'julia +1.10 --startup-file=no -e "using KiteModels"' 'julia +1.12 --startup-file=no -e "using KiteModels"'
Benchmark 1: julia +1.10 --startup-file=no -e "using KiteModels"
Time (mean ± σ): 4.626 s ± 0.079 s [User: 4.376 s, System: 1.142 s]
Range (min … max): 4.505 s … 4.721 s 10 runs
Benchmark 2: julia +1.12 --startup-file=no -e "using KiteModels"
Time (mean ± σ): 7.482 s ± 0.091 s [User: 7.896 s, System: 0.485 s]
Range (min … max): 7.302 s … 7.590 s 10 runs
Summary
'julia +1.10 --startup-file=no -e "using KiteModels"' ran
1.62 ± 0.03 times faster than 'julia +1.12 --startup-file=no -e "using KiteModels"'
I checked on https://github.com/JuliaLang/julia/pull/58444 (required fixing global Optimizer::Any in the old version of Optim.jl KiteModels uses)
Down to 1.26x
% hyperfine 'julia +1.10 --startup-file=no -e "using KiteModels"' './julia --startup-file=no -e "using KiteModels"'
Benchmark 1: julia +1.10 --startup-file=no -e "using KiteModels"
Time (mean ± σ): 6.510 s ± 0.239 s [User: 7.002 s, System: 0.782 s]
Range (min … max): 6.381 s … 7.182 s 10 runs
Benchmark 2: ./julia --startup-file=no -e "using KiteModels"
Time (mean ± σ): 8.229 s ± 0.439 s [User: 8.708 s, System: 0.687 s]
Range (min … max): 7.994 s … 9.430 s 10 runs
Summary
julia +1.10 --startup-file=no -e "using KiteModels" ran
1.26 ± 0.08 times faster than ./julia --startup-file=no -e "using KiteModels"
(required fixing
global Optimizer::Anyin the old version of Optim.jl KiteModels uses)
Is there anything I have to fix?
Try master. You'll see for yourself.
I can confirm that the load time regression in nightly is smaller than in 1.12:
Summary
julia +1.10 --startup-file=no -e "using ModelingToolkit" ran
1.38 ± 0.01 times faster than julia +nightly --startup-file=no -e "using ModelingToolkit"
Summary
julia +1.10 --startup-file=no -e "using ModelingToolkit" ran
1.71 ± 0.01 times faster than julia +1.12 --startup-file=no -e "using ModelingToolkit"
Slowdown of Julia nightly vs Julia 1.10: factor of 1.38 Slowdown of Julia 1.12 vs Julia 1.10: factor of 1.71
I tested Julia 1.12.0-beta4.
hyperfine 'julia +1.10 --startup-file=no -e "using ModelingToolkit"' 'julia +1.12 --startup-file=no -e "using ModelingToolkit"'
Benchmark 1: julia +1.10 --startup-file=no -e "using ModelingToolkit"
Time (mean ± σ): 4.129 s ± 0.019 s [User: 3.853 s, System: 0.847 s]
Range (min … max): 4.107 s … 4.174 s 10 runs
Benchmark 2: julia +1.12 --startup-file=no -e "using ModelingToolkit"
Time (mean ± σ): 6.022 s ± 0.015 s [User: 6.067 s, System: 0.530 s]
Range (min … max): 6.001 s … 6.050 s 10 runs
Summary
julia +1.10 --startup-file=no -e "using ModelingToolkit" ran
1.46 ± 0.01 times faster than julia +1.12 --startup-file=no -e "using ModelingToolkit"
Better than beta3, but - for me - not yet convincing.
Possibly related: https://github.com/SciML/ModelingToolkit.jl/issues/3706
I (vibe) coded a little script to measure load time and startup time of different julia versions:
Script
#!/usr/bin/env julia
using JSON
using Printf
using Logging
# ─── Helpers ────────────────────────────────────────────────────────────────
function run_cmd(cmd::Cmd)
println("▶ ", cmd)
success(run(cmd)) || error("Command failed: $cmd")
end
# Ensure each Julia version is installed via juliaup
function ensure_julia_versions(versions::Vector{String})
@info "Ensuring Julia versions installed via juliaup..."
for v in versions
run_cmd(`juliaup add $v`)
end
end
# Benchmark pure Julia startup (no package)
function benchmark_startups(versions::Vector{String}, env_root::AbstractString)
startup = Dict{String,Float64}()
@info "Benchmarking Julia startup times…"
for (i, ver) in enumerate(versions)
println("\n[$i/$(length(versions))] Julia $ver (startup)")
d = joinpath(env_root, "julia-$ver", "__startup__")
mkpath(d)
jf = joinpath(d, "startup.json")
julia_cmd = "julia +$ver --startup-file=no -e ''"
hf = `hyperfine --export-json $jf $julia_cmd`
run_cmd(hf)
data = JSON.parsefile(jf)
startup[ver] = data["results"][1]["min"]
end
return startup
end
# Install a single package into a fresh environment
function install_package(ver::String, pkg::String, env_dir::AbstractString)
mkpath(env_dir)
add_cmd = "using Pkg; Pkg.add(\"$pkg\")"
run_cmd(`julia +$ver --project=$env_dir -e $add_cmd`)
end
# Benchmark “using pkg” (includes startup), return raw min time
function benchmark_package(ver::String, pkg::String, env_dir::AbstractString)
jf = joinpath(env_dir, "hf.json")
julia_cmd = "julia +$ver --startup-file=no --project=$env_dir -e 'using $pkg'"
hf = `hyperfine --export-json $jf $julia_cmd`
run_cmd(hf)
data = JSON.parsefile(jf)
return data["results"][1]["min"]
end
# Loop over all version×package combos and collect raw timings
function benchmark_all(versions::Vector{String},
packages::Vector{String},
env_root::AbstractString)
pkg_times = Dict{Tuple{String,String},Float64}()
total = length(versions) * length(packages)
count = 0
@info "Benchmarking package load times…"
for ver in versions
for pkg in packages
count += 1
println("\n[$count/$total] Julia $ver → $pkg")
env_dir = joinpath(env_root, "julia-$ver", pkg)
install_package(ver, pkg, env_dir)
t_raw = benchmark_package(ver, pkg, env_dir)
pkg_times[(ver,pkg)] = t_raw
end
end
return pkg_times
end
# Emit a markdown table: first “Startup” row, then one row per package,
# subtracting each version’s startup time and computing % vs baseline
function emit_markdown(startup::Dict{String,Float64},
pkg_times::Dict{Tuple{String,String},Float64},
versions::Vector{String},
packages::Vector{String},
results_md::AbstractString)
baseline = versions[1]
base_start = startup[baseline]
io = IOBuffer()
println(io, "| Item | Version | Time (s) | Change vs $baseline |")
println(io, "|:----------- |:-------:|---------:|--------------------:|")
# Startup times
for ver in versions
t = startup[ver]
pct = (t - base_start)/base_start*100
println(io, @sprintf("| %-11s | %-7s | %8.3f | %+7.2f%% |",
"Startup", ver, t, pct))
end
# Package load times (subtract startup)
for pkg in packages
base_pkg = pkg_times[(baseline,pkg)] - base_start
for ver in versions
t = pkg_times[(ver,pkg)] - startup[ver]
pct = (t - base_pkg)/base_pkg*100
println(io, @sprintf("| %-11s | %-7s | %8.3f | %+7.2f%% |",
pkg, ver, t, pct))
end
end
md = String(take!(io))
open(results_md, "w") do f
write(f, md)
end
println("\n✅ Done. Results:\n")
print(md)
println("\n(also saved to `$results_md`)")
end
# ─── Main Entrypoint ─────────────────────────────────────────────────────────
function main(versions, packages, env_root, results_md)
@info "Environments will be stored under $env_root"
mkpath(env_root)
ensure_julia_versions(versions)
startup = benchmark_startups(versions, env_root)
pkg_times = benchmark_all(versions, packages, env_root)
emit_markdown(startup, pkg_times, versions, packages, results_md)
end
# ─── User-configurable globals ─────────────────────────────────────────────
const JULIA_VERSIONS = ["1.10.9", "1.11.5", "1.12-nightly", "nightly"] # baseline is first
const PACKAGES = ["DataFrames", "Plots", "ModelingToolkit", "CairoMakie"]
const ENV_ROOT = mktempdir() # temp projects here
const RESULTS_MD = "results.md" # output file
# ─── Run! ───────────────────────────────────────────────────────────────────
main(JULIA_VERSIONS, PACKAGES, ENV_ROOT, RESULTS_MD)
Results:
| Item | Version | Time (s) | Change vs 1.10 |
|---|---|---|---|
| Startup | 1.10.9 | 0.102 | +0.00% |
| Startup | 1.11.5 | 0.086 | -15.82% |
| Startup | 1.12-nightly | 0.110 | +7.16% |
| Startup | nightly | 0.079 | -22.46% |
| DataFrames | 1.10.9 | 0.312 | +0.00% |
| DataFrames | 1.11.5 | 0.259 | -17.00% |
| DataFrames | 1.12-nightly | 0.427 | +36.85% |
| DataFrames | nightly | 0.437 | +39.90% |
| Plots | 1.10.9 | 0.707 | +0.00% |
| Plots | 1.11.5 | 0.978 | +38.31% |
| Plots | 1.12-nightly | 0.939 | +32.76% |
| Plots | nightly | 0.925 | +30.80% |
| ModelingToolkit | 1.10.9 | 3.030 | +0.00% |
| ModelingToolkit | 1.11.5 | 3.086 | +1.83% |
| ModelingToolkit | 1.12-nightly | 3.652 | +20.52% |
| ModelingToolkit | nightly | 4.196 | +38.47% |
| CairoMakie | 1.10.9 | 2.298 | +0.00% |
| CairoMakie | 1.11.5 | 3.292 | +43.26% |
| CairoMakie | 1.12-nightly | 3.348 | +45.70% |
| CairoMakie | nightly | 3.498 | +52.24% |
It sems for some packages, the load time regression came in 1.11 (except for DataFrames and ModelingToolkit).
# Julia 1.10.9
julia> @time using ModelingToolkit
3.270877 seconds (5.32 M allocations: 387.316 MiB, 14.69% gc time, 2.64% compilation time: 33% of which was recompilation)
# Julia 1.11.5
julia> @time using ModelingToolkit
3.777953 seconds (6.95 M allocations: 434.050 MiB, 11.09% gc time, 5.71% compilation time: 74% of which was recompilation)
# Julia 1.12.0-beta4.33 (2025-06-20)
julia> @time using ModelingToolkit
4.915161 seconds (13.43 M allocations: 796.804 MiB, 14.04% gc time, 20.00% compilation time: 15% of which was recompilation)
julia> versioninfo()
Julia Version 1.12.0-beta4.33
Commit 8ec81e2b57* (2025-06-20 05:40 UTC)
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 32 × AMD Ryzen 9 7950X 16-Core Processor
WORD_SIZE: 64
LLVM: libLLVM-18.1.7 (ORCJIT, znver4)
GC: Built with stock GC
Threads: 1 default, 1 interactive, 1 GC (on 32 virtual cores)
Environment:
LD_LIBRARY_PATH = /lib:/usr/lib:/usr/local/lib
So I see a regression of 50% compared to Julia 1.10, and a regression of 30% compared to Julia 1.11, which is a much larger regression than @KristofferC reported.
I think we have to punt on getting all this fixed for 1.12.0 and backport improvements instead. It is at least better now than when I opened this issue.
It's sad that this (and much worse, these) user experience degradation, which IMO should be release blockers, keep being sacrificed.
Here are some numbers from RxInfer.jl package
→ hyperfine 'julia +1.10 --startup-file=no rxinfer_using.jl' 'julia +1.11 --startup-file=no rxinfer_using.jl' 'julia +1.12 --startup-file=no rxinfer_using.jl' 'julia +nightly --startup-file=no rxinfer_using.jl'
Benchmark 1: julia +1.10 --startup-file=no rxinfer_using.jl
Time (mean ± σ): 1.934 s ± 0.182 s [User: 2.744 s, System: 0.215 s]
Range (min … max): 1.866 s … 2.449 s 10 runs
Benchmark 2: julia +1.11 --startup-file=no rxinfer_using.jl
Time (mean ± σ): 7.325 s ± 0.322 s [User: 7.889 s, System: 0.378 s]
Range (min … max): 7.167 s … 8.201 s 10 runs
Benchmark 3: julia +1.12 --startup-file=no rxinfer_using.jl
Time (mean ± σ): 8.314 s ± 0.263 s [User: 8.946 s, System: 0.355 s]
Range (min … max): 8.187 s … 9.053 s 10 runs
Benchmark 4: julia +nightly --startup-file=no rxinfer_using.jl
Time (mean ± σ): 5.554 s ± 0.327 s [User: 5.246 s, System: 0.237 s]
Range (min … max): 5.413 s … 6.468 s 10 runs
Summary
julia +1.10 --startup-file=no rxinfer_using.jl ran
2.87 ± 0.32 times faster than julia +nightly --startup-file=no rxinfer_using.jl
3.79 ± 0.39 times faster than julia +1.11 --startup-file=no rxinfer_using.jl
4.30 ± 0.43 times faster than julia +1.12 --startup-file=no rxinfer_using.jl
rxinfer_using.jl file has just one line of using RxInfer. This is significant UX degradation, which is especially noticeable in Jupyter notebooks and Pluto.
More benchmarks involving some payload.
→ hyperfine 'julia +1.10 --startup-file=no rxinfer_benchmark.jl' 'julia +1.11 --startup-file=no rxinfer_benchmark.jl' 'julia +1.12 --startup-file=no rxinfer_benchmark.jl' 'julia +nightly --startup-file=no rxinfer_benchmark.jl'
Benchmark 1: julia +1.10 --startup-file=no rxinfer_benchmark.jl
Time (mean ± σ): 14.070 s ± 0.144 s [User: 14.815 s, System: 0.282 s]
Range (min … max): 13.733 s … 14.181 s 10 runs
Benchmark 2: julia +1.11 --startup-file=no rxinfer_benchmark.jl
Time (mean ± σ): 21.639 s ± 0.449 s [User: 21.790 s, System: 0.510 s]
Range (min … max): 21.057 s … 22.433 s 10 runs
Benchmark 3: julia +1.12 --startup-file=no rxinfer_benchmark.jl
Time (mean ± σ): 23.676 s ± 0.388 s [User: 24.037 s, System: 0.525 s]
Range (min … max): 23.329 s … 24.609 s 10 runs
Benchmark 4: julia +nightly --startup-file=no rxinfer_benchmark.jl
Time (mean ± σ): 21.621 s ± 0.286 s [User: 22.093 s, System: 0.449 s]
Range (min … max): 21.395 s … 22.354 s 10 runs
Summary
julia +1.10 --startup-file=no rxinfer_benchmark.jl ran
1.54 ± 0.03 times faster than julia +nightly --startup-file=no rxinfer_benchmark.jl
1.54 ± 0.04 times faster than julia +1.11 --startup-file=no rxinfer_benchmark.jl
1.68 ± 0.03 times faster than julia +1.12 --startup-file=no rxinfer_benchmark.jl
julia> versioninfo()
Julia Version 1.11.5
Commit 760b2e5b739 (2025-04-14 06:53 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin24.0.0)
CPU: 11 × Apple M3 Pro
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, apple-m2)
Threads: 1 default, 0 interactive, 1 GC (on 5 virtual cores)
The `rxinfer_benchmark.jl` is the following:
using RxInfer, Random
@model function linear_gaussian_ssm_smoothing(y, A, B, P, Q)
# Set a prior distribution for x[1]
x[1] ~ MvNormal(μ = [ 0.0, 0.0 ], Σ = [ 100.0 0.0; 0.0 100.0 ])
y[1] ~ MvNormal(μ = B * x[1], Σ = Q)
for t in 2:length(y)
x[t] ~ MvNormal(μ = A * x[t - 1], Σ = P)
y[t] ~ MvNormal(μ = B * x[t], Σ = Q)
end
end
@model function linear_gaussian_ssm_filtering(x_min_t_mean, x_min_t_cov, y_t, A, B, P, Q)
x_min_t ~ MvNormal(μ = x_min_t_mean, Σ = x_min_t_cov)
x_t ~ MvNormal(μ = A * x_min_t, Σ = P)
y_t ~ MvNormal(μ = B * x_t, Σ = Q)
end
function generate_data(n, A, B, P, Q; seed = 42)
Random.seed!(seed)
x_prev = zeros(2)
x = Vector{Vector{Float64}}(undef, n)
y = Vector{Vector{Float64}}(undef, n)
for i in 1:n
x[i] = rand(MvNormal(A * x_prev, P))
y[i] = rand(MvNormal(B * x[i], Q))
x_prev = x[i]
end
return x, y
end
n = 200
θ = π / 15
A = [ cos(θ) -sin(θ); sin(θ) cos(θ) ]
B = [ 1.3 0.0; 0.0 0.7 ]
P = [ 0.05 0.0; 0.0 0.05 ]
Q = [ 10.0 0.0; 0.0 10.0 ]
real_x, real_y = generate_data(n, A, B, P, Q);
function rxinfer_inference_smoothing(observations, A, B, P, Q)
n = length(observations)
result = infer(
model = linear_gaussian_ssm_smoothing(A = A, B = B, P = P, Q = Q),
data = (y = observations, ),
options = (limit_stack_depth = 500, )
)
return result.posteriors[:x]
end
# Inference procedure for single time step graph and filtering
function rxinfer_inference_filtering(observations, A, B, P, Q)
n = length(observations)
autoupdates = @autoupdates begin
x_min_t_mean, x_min_t_cov = mean_cov(q(x_t))
end
result = infer(
model = linear_gaussian_ssm_filtering(A = A, B = B, P = P, Q = Q),
data = (y_t = observations, ),
autoupdates = autoupdates,
initialization = @initialization(q(x_t) = MvNormalMeanCovariance([ 0.0, 0.0 ], [ 100.0 0.0; 0.0 100.0 ])),
historyvars = (x_t = KeepLast(), ),
keephistory = n
)
return result.history[:x_t]
end
x_rxinfer_smoothing_inferred = rxinfer_inference_smoothing(real_y, A, B, P, Q);
x_rxinfer_filtering_inferred = rxinfer_inference_filtering(real_y, A, B, P, Q);
x_rxinfer_smoothing_inferred != x_rxinfer_filtering_inferred
@time_imports reports would be good to add.
Do we also need to add some more granular timing within loading to help characterize things in the wild without having to pull out profiling tools?
Julia 1.11.5:
julia> @time using ModelingToolkit
3.830307 seconds (6.73 M allocations: 417.226 MiB, 6.06% gc time, 5.72% compilation time: 93% of which was recompilation)
Julia 1.12-beta4.80 (2025-07-08):
julia> @time using ModelingToolkit
6.155234 seconds (16.10 M allocations: 940.357 MiB, 13.21% gc time, 21.38% compilation time: 13% of which was recompilation)
So Julia 1.12-beta4.80 (2025-07-08) is 60% slower than Julia 1.11.5.
Output of @time_imports on 1.12:
julia> @time_imports using ModelingToolkit
1.4 ms Printf
32.7 ms Dates
0.5 ms TOML
0.4 ms Preferences
0.1 ms PrecompileTools
0.1 ms Reexport
0.9 ms StaticArraysCore
97.9 ms StaticArrays
6.2 ms CommonWorldInvalidations
┌ 0.0 ms DocStringExtensions.__init__()
1.0 ms DocStringExtensions
0.2 ms IntegerMathUtils
4.6 ms Primes
3.6 ms MacroTools
0.2 ms ConstructionBase
0.2 ms ConstructionBase → ConstructionBaseLinearAlgebraExt
6.3 ms Setfield
0.5 ms CompositeTypes
7.7 ms IntervalSets
0.2 ms IntervalSets → IntervalSetsRandomExt
38.0 ms DomainSets
0.3 ms ConstructionBase → ConstructionBaseIntervalSetsExt
0.5 ms ConstructionBase → ConstructionBaseStaticArraysExt
0.2 ms TermInterface
0.9 ms Unityper
0.1 ms UUIDs
0.2 ms Compat
0.1 ms Compat → CompatLinearAlgebraExt
5.0 ms OrderedCollections
32.6 ms DataStructures
0.3 ms ExprTools
0.7 ms Serialization
0.8 ms RuntimeGeneratedFunctions
0.6 ms ArrayInterface
0.3 ms ArrayInterface → ArrayInterfaceStaticArraysCoreExt
┌ 0.0 ms InverseFunctions.__init__()
0.3 ms InverseFunctions
0.1 ms CompositionsBase
0.1 ms CompositionsBase → CompositionsBaseInverseFunctionsExt
0.1 ms InverseFunctions → InverseFunctionsDatesExt
┌ 0.0 ms Accessors.__init__()
6.1 ms Accessors
0.2 ms Accessors → LinearAlgebraExt
0.1 ms DataValueInterfaces
0.3 ms DataAPI
0.1 ms IteratorInterfaceExtensions
0.1 ms TableTraits
13.1 ms Tables
1.3 ms StringManipulation
3.2 ms Crayons
1.0 ms LaTeXStrings
31.5 ms PrettyTables
3.1 ms SymbolicIndexingInterface
3.4 ms ExproniconLite
0.3 ms TaskLocalValues
1.1 ms WeakValueDicts
11.6 ms IrrationalConstants
0.4 ms LogExpFunctions
┌ 0.0 ms OpenLibm_jll.__init__()
0.2 ms OpenLibm_jll
0.3 ms JLLWrappers
┌ 0.2 ms CompilerSupportLibraries_jll.__init__()
0.3 ms CompilerSupportLibraries_jll
┌ 71.4 ms OpenSpecFun_jll.__init__() 99.60% compilation time (90% recompilation)
71.7 ms OpenSpecFun_jll 99.18% compilation time (90% recompilation)
4.8 ms SpecialFunctions
0.2 ms LogExpFunctions → LogExpFunctionsInverseFunctionsExt
0.3 ms NaNMath
┌ 0.0 ms TimerOutputs.__init__()
4.8 ms TimerOutputs
10.2 ms AbstractTrees
2.9 ms Combinatorics
┌ 0.5 ms SuiteSparse_jll.__init__()
0.8 ms SuiteSparse_jll
┌ 0.1 ms SparseArrays.CHOLMOD.__init__()
142.2 ms SparseArrays
0.1 ms Logging
15.1 ms Test
142.1 ms MutableArithmetics
14.9 ms ChainRulesCore
0.3 ms ChainRulesCore → ChainRulesCoreSparseArraysExt
41.3 ms MultivariatePolynomials
0.3 ms ArrayInterface → ArrayInterfaceSparseArraysExt
0.3 ms InverseFunctions → InverseFunctionsTestExt
0.3 ms Accessors → TestExt
0.1 ms ArrayInterface → ArrayInterfaceChainRulesCoreExt
0.8 ms LogExpFunctions → LogExpFunctionsChainRulesCoreExt
2.0 ms SpecialFunctions → SpecialFunctionsChainRulesCoreExt
0.1 ms Future
9.7 ms DynamicPolynomials
1.6 ms Bijections
0.3 ms Accessors → StaticArraysExt
0.2 ms StaticArrays → StaticArraysChainRulesCoreExt
90.0 ms SymbolicUtils
0.3 ms Accessors → IntervalSetsExt
2.8 ms RecipesBase
1.5 ms Statistics
0.3 ms Adapt
0.4 ms GPUArraysCore
0.2 ms ArrayInterface → ArrayInterfaceGPUArraysCoreExt
23.2 ms RecursiveArrayTools
0.3 ms SciMLStructures
┌ 0.0 ms Distributed.__init__()
23.9 ms Distributed 61.13% compilation time
0.2 ms CommonSolve
4.4 ms FunctionWrappers
0.2 ms FunctionWrappersWrappers
0.5 ms EnumX
6.0 ms ADTypes
0.5 ms ADTypes → ADTypesConstructionBaseExt
4.1 ms Jieko
29.3 ms Moshi
17.5 ms SciMLOperators
0.2 ms SciMLOperators → SciMLOperatorsStaticArraysCoreExt
┌ 0.0 ms SciMLBase.__init__()
136.8 ms SciMLBase
0.2 ms IntervalSets → IntervalSetsRecipesBaseExt
0.1 ms IntervalSets → IntervalSetsStatisticsExt
0.2 ms StaticArrays → StaticArraysStatisticsExt
0.1 ms Statistics → SparseArraysExt
0.1 ms Adapt → AdaptStaticArraysExt
0.2 ms Adapt → AdaptSparseArraysExt
0.3 ms RecursiveArrayTools → RecursiveArrayToolsSparseArraysExt
0.1 ms ADTypes → ADTypesChainRulesCoreExt
0.1 ms SciMLOperators → SciMLOperatorsSparseArraysExt
0.5 ms SciMLBase → SciMLBaseChainRulesCoreExt
2.3 ms SymbolicLimits
10.9 ms OffsetArrays
0.5 ms OffsetArrays → OffsetArraysAdaptExt
0.7 ms DiffRules
0.6 ms SortingAlgorithms
5.1 ms Missings
0.3 ms StatsAPI
0.3 ms PtrArrays
1.8 ms AliasTables
12.4 ms StatsBase
0.2 ms SuiteSparse
10.8 ms PDMats
┌ 0.2 ms Rmath_jll.__init__()
0.5 ms Rmath_jll
┌ 0.0 ms Rmath.__init__()
0.8 ms Rmath
2.6 ms HypergeometricFunctions
1.9 ms StatsFuns
3.0 ms QuadGK
54.1 ms FillArrays
0.2 ms FillArrays → FillArraysPDMatsExt
1.8 ms FillArrays → FillArraysSparseArraysExt
0.3 ms FillArrays → FillArraysStatisticsExt
┌ 0.0 ms Distributions.TestUtils.__init__()
68.3 ms Distributions
0.2 ms StatsFuns → StatsFunsInverseFunctionsExt
0.5 ms StatsFuns → StatsFunsChainRulesCoreExt
0.7 ms Distributions → DistributionsTestExt
0.6 ms Distributions → DistributionsChainRulesCoreExt
3.2 ms Format
7.6 ms Latexify
0.2 ms Latexify → SparseArraysExt
┌ 0.0 ms Symbolics.__init__()
146.1 ms Symbolics
0.3 ms ConcreteStructs
0.1 ms FastPower
0.2 ms MuladdMacro
0.1 ms UnPack
0.3 ms Parameters
0.1 ms IfElse
37.1 ms Static
20.6 ms StaticArrayInterface
0.7 ms ManualMemory
┌ 0.0 ms ThreadingUtilities.__init__()
0.7 ms ThreadingUtilities
0.2 ms SIMDTypes
1.7 ms LayoutPointers
6.0 ms CloseOpenIntervals
10.9 ms StrideArraysCore
0.2 ms BitTwiddlingConvenienceFunctions
0.7 ms CpuId
┌ 36.9 ms CPUSummary.__init__() 99.88% compilation time (83% recompilation)
38.9 ms CPUSummary 94.75% compilation time (83% recompilation)
┌ 0.0 ms PolyesterWeave.__init__()
5.5 ms PolyesterWeave
1.0 ms Polyester
1.2 ms FastBroadcast
0.2 ms RecursiveArrayTools → RecursiveArrayToolsFastBroadcastExt
┌ 0.0 ms TruncatedStacktraces.__init__()
0.2 ms TruncatedStacktraces
0.2 ms FastClosures
2.0 ms DiffEqBase
┌ 0.0 ms DifferentiationInterface.__init__()
4.0 ms DifferentiationInterface
0.2 ms DifferentiationInterface → DifferentiationInterfaceGPUArraysCoreExt
1.6 ms Functors
4.6 ms DiffEqCallbacks
2.7 ms StaticArrayInterface → StaticArrayInterfaceStaticArraysExt
1.3 ms StaticArrayInterface → StaticArrayInterfaceOffsetArraysExt
0.3 ms DiffEqBase → DiffEqBaseDistributionsExt
0.2 ms DiffEqBase → DiffEqBaseChainRulesCoreExt
0.1 ms DiffEqBase → DiffEqBaseSparseArraysExt
0.2 ms DifferentiationInterface → DifferentiationInterfaceChainRulesCoreExt
0.2 ms DifferentiationInterface → DifferentiationInterfaceStaticArraysExt
0.1 ms DifferentiationInterface → DifferentiationInterfaceSparseArraysExt
0.6 ms DifferentiationInterface → DifferentiationInterfaceSymbolicsExt
0.7 ms SimpleTraits
1.4 ms ArnoldiMethod
0.3 ms Inflate
0.3 ms Mmap
3.6 ms SharedArrays
16.5 ms Graphs
0.3 ms ResettableStacks
5.2 ms RandomNumbers
1.7 ms Random123
0.2 ms PoissonRandom
1.1 ms FiniteDiff
0.8 ms DifferentiationInterface → DifferentiationInterfaceFiniteDiffExt
2.3 ms DiffResults
0.4 ms CommonSubexpressions
66.9 ms ForwardDiff
1.3 ms DifferentiationInterface → DifferentiationInterfaceForwardDiffExt
5.2 ms NLSolversBase
0.4 ms PositiveFactorizations
4.1 ms LineSearches
0.2 ms FiniteDiff → FiniteDiffSparseArraysExt
11.8 ms Optim
0.3 ms FiniteDiff → FiniteDiffStaticArraysExt
0.1 ms FastPower → FastPowerForwardDiffExt
0.2 ms RecursiveArrayTools → RecursiveArrayToolsForwardDiffExt
1.2 ms DiffEqBase → DiffEqBaseForwardDiffExt
0.7 ms ForwardDiff → ForwardDiffStaticArraysExt
3.1 ms DiffEqNoiseProcess
3.7 ms Symbolics → SymbolicsForwardDiffExt
13.4 ms JumpProcesses
105.3 ms Unitful
0.2 ms Accessors → UnitfulExt
0.4 ms DiffEqBase → DiffEqBaseUnitfulExt
0.1 ms Unitful → InverseFunctionsUnitfulExt
0.3 ms Unitful → ForwardDiffExt
0.6 ms Unitful → PrintfExt
0.1 ms Unitful → ConstructionBaseUnitfulExt
4.5 ms URIs
22.8 ms JuliaSyntax
1.8 ms Glob
26.3 ms CommonMark
96.8 ms JuliaFormatter
52.0 ms MLStyle
0.4 ms SciMLBase → SciMLBaseMLStyleExt
0.6 ms MaybeInplace
1.7 ms SciMLJacobianOperators
2.2 ms LineSearch
2.6 ms EnzymeCore
0.2 ms ADTypes → ADTypesEnzymeCoreExt
0.1 ms EnzymeCore → AdaptExt
7.5 ms NonlinearSolveBase
0.3 ms NonlinearSolveBase → NonlinearSolveBaseLineSearchExt
0.2 ms NonlinearSolveBase → NonlinearSolveBaseDiffEqBaseExt
215.1 ms ArrayLayouts
1.0 ms ArrayLayouts → ArrayLayoutsSparseArraysExt
61.2 ms LazyArrays
19.4 ms Krylov
┌ 0.0 ms NetworkOptions.__init__()
0.6 ms NetworkOptions
┌ 0.8 ms OpenSSL_jll.__init__()
1.0 ms OpenSSL_jll
┌ 0.1 ms LibSSH2_jll.__init__()
0.3 ms LibSSH2_jll
┌ 0.1 ms LibGit2_jll.__init__()
0.3 ms LibGit2_jll
20.1 ms LibGit2
7.3 ms ArgTools
┌ 0.1 ms nghttp2_jll.__init__()
0.3 ms nghttp2_jll
┌ 0.0 ms Zlib_jll.__init__()
0.2 ms Zlib_jll
┌ 0.1 ms LibCURL_jll.__init__()
0.3 ms LibCURL_jll
┌ 0.0 ms MozillaCACerts_jll.__init__()
0.2 ms MozillaCACerts_jll
┌ 0.0 ms LibCURL.__init__()
1.5 ms LibCURL
┌ 0.6 ms Downloads.Curl.__init__()
6.8 ms Downloads
2.1 ms Tar
┌ 0.0 ms p7zip_jll.__init__()
0.3 ms p7zip_jll
┌ 0.0 ms Pkg.__init__()
173.7 ms Pkg
0.3 ms LazyArtifacts
┌ 1127.7 ms IntelOpenMP_jll.__init__() 99.96% compilation time
1128.0 ms IntelOpenMP_jll 99.94% compilation time
┌ 71.7 ms oneTBB_jll.__init__() 98.94% compilation time (100% recompilation)
72.1 ms oneTBB_jll 98.39% compilation time (100% recompilation)
┌ 1.0 ms MKL_jll.__init__()
1.4 ms MKL_jll
┌ 0.0 ms LinearSolve.__init__()
18.6 ms LinearSolve
0.2 ms MaybeInplace → MaybeInplaceSparseArraysExt
26.7 ms LinearSolve → LinearSolveSparseArraysExt
0.7 ms LinearSolve → LinearSolveEnzymeExt
0.2 ms NonlinearSolveBase → NonlinearSolveBaseLinearSolveExt
0.2 ms NonlinearSolveBase → NonlinearSolveBaseSparseArraysExt
6.3 ms LinearSolve → LinearSolveForwardDiffExt
0.5 ms NonlinearSolveBase → NonlinearSolveBaseForwardDiffExt
180.8 ms NonlinearSolveFirstOrder
70.3 ms NonlinearSolveQuasiNewton
0.7 ms NonlinearSolveQuasiNewton → NonlinearSolveQuasiNewtonForwardDiffExt
5.4 ms BracketingNonlinearSolve
0.8 ms BracketingNonlinearSolve → BracketingNonlinearSolveForwardDiffExt
16.5 ms SimpleNonlinearSolve
0.4 ms BracketingNonlinearSolve → BracketingNonlinearSolveChainRulesCoreExt
0.2 ms SimpleNonlinearSolve → SimpleNonlinearSolveChainRulesCoreExt
0.2 ms SimpleNonlinearSolve → SimpleNonlinearSolveDiffEqBaseExt
14.0 ms SparseMatrixColorings
1.0 ms DifferentiationInterface → DifferentiationInterfaceSparseMatrixColoringsExt
2.0 ms NonlinearSolveBase → NonlinearSolveBaseSparseMatrixColoringsExt
29.8 ms NonlinearSolveSpectralMethods
0.6 ms NonlinearSolveSpectralMethods → NonlinearSolveSpectralMethodsForwardDiffExt
49.7 ms NonlinearSolve
0.4 ms LineSearch → LineSearchLineSearchesExt
0.2 ms LazyArrays → LazyArraysStaticArraysExt
0.4 ms SCCNonlinearSolve
0.2 ms SimpleUnPack
10.7 ms OrdinaryDiffEqCore
0.3 ms OrdinaryDiffEqCore → OrdinaryDiffEqCoreEnzymeCoreExt
0.5 ms ImplicitDiscreteSolve
296.2 ms BlockArrays
23.5 ms LazyArrays → LazyArraysBlockArraysExt
0.3 ms BlockArrays → BlockArraysAdaptExt
4.1 ms DispatchDoctor
0.2 ms TestItems
366.8 ms DynamicQuantities
0.3 ms DispatchDoctor → DispatchDoctorEnzymeCoreExt
0.4 ms DispatchDoctor → DispatchDoctorChainRulesCoreExt
20.0 ms DynamicQuantities → DynamicQuantitiesLinearAlgebraExt
2.1 ms DynamicQuantities → DynamicQuantitiesUnitfulExt
0.4 ms SciMLPublic
0.3 ms FindFirstFunctions
875.7 ms ModelingToolkit
Needs a comparison to be helpful. Putting them side by side in a markdown table is most helpful.
Well, @time_imports does not exist for Julia 1.11.
It does (but not 1.10 I think).
| time_1.12 | package | Time_1.11 | package | Extra_packages |
|---|---|---|---|---|
| 10.4 | AbstractTrees | 4.9 | AbstractTrees | |
| 6.9 | Accessors | 0.3 | Accessors → IntervalSetsExt | |
| 0.3 | Accessors → IntervalSetsExt | 0.2 | Accessors → LinearAlgebraExt | |
| 0.2 | Accessors → LinearAlgebraExt | 0.3 | Accessors → StaticArraysExt | |
| 0.3 | Accessors → StaticArraysExt | 0.2 | Accessors → TestExt | |
| 0.4 | Accessors → TestExt | 0.3 | Accessors → UnitfulExt | |
| 0.3 | Accessors → UnitfulExt | 15.1 | Accessors 37.79% compilation time (100% recompilation) | |
| 1.8 | Adapt | 0.2 | Adapt | |
| 0.2 | Adapt → AdaptSparseArraysExt | 0.1 | Adapt → AdaptSparseArraysExt | |
| 0.1 | Adapt → AdaptStaticArraysExt | 0.1 | Adapt → AdaptStaticArraysExt | |
| 6 | ADTypes | 2.1 | ADTypes | |
| 0.1 | ADTypes → ADTypesChainRulesCoreExt | 0.1 | ADTypes → ADTypesChainRulesCoreExt | |
| 0.5 | ADTypes → ADTypesConstructionBaseExt | 0.3 | ADTypes → ADTypesConstructionBaseExt | |
| 0.2 | ADTypes → ADTypesEnzymeCoreExt | 0.1 | ADTypes → ADTypesEnzymeCoreExt | |
| 1.8 | AliasTables | 0.7 | AliasTables | |
| 7.8 | ArgTools | 7.8 | ||
| 1.4 | ArnoldiMethod | 0.9 | ArnoldiMethod | |
| 0.6 | ArrayInterface | 0.6 | ArrayInterface | |
| 0.2 | ArrayInterface → ArrayInterfaceChainRulesCoreExt | 0.1 | ArrayInterface → ArrayInterfaceChainRulesCoreExt | |
| 0.2 | ArrayInterface → ArrayInterfaceGPUArraysCoreExt | 0.1 | ArrayInterface → ArrayInterfaceGPUArraysCoreExt | |
| 0.3 | ArrayInterface → ArrayInterfaceSparseArraysExt | 0.2 | ArrayInterface → ArrayInterfaceSparseArraysExt | |
| 0.3 | ArrayInterface → ArrayInterfaceStaticArraysCoreExt | 0.2 | ArrayInterface → ArrayInterfaceStaticArraysCoreExt | |
| 222.1 | ArrayLayouts | 159 | ArrayLayouts | |
| 1.1 | ArrayLayouts → ArrayLayoutsSparseArraysExt | 0.8 | ArrayLayouts → ArrayLayoutsSparseArraysExt | |
| 2.6 | Bijections | 0.7 | Bijections | |
| 0.2 | BitTwiddlingConvenienceFunctions | 0.2 | BitTwiddlingConvenienceFunctions | |
| 247.9 | BlockArrays | 143.9 | BlockArrays | |
| 0.3 | BlockArrays → BlockArraysAdaptExt | 0.3 | BlockArrays → BlockArraysAdaptExt | |
| 5.9 | BracketingNonlinearSolve | 11.2 | BracketingNonlinearSolve | |
| 0.4 | BracketingNonlinearSolve → BracketingNonlinearSolveChainRulesCoreExt | 0.5 | BracketingNonlinearSolve → BracketingNonlinearSolveChainRulesCoreExt | |
| 1.1 | BracketingNonlinearSolve → BracketingNonlinearSolveForwardDiffExt | 0.7 | BracketingNonlinearSolve → BracketingNonlinearSolveForwardDiffExt | |
| 15.3 | ChainRulesCore | 13.5 | ChainRulesCore | |
| 0.3 | ChainRulesCore → ChainRulesCoreSparseArraysExt | 0.3 | ChainRulesCore → ChainRulesCoreSparseArraysExt | |
| 7.4 | CloseOpenIntervals | 2.2 | CloseOpenIntervals | |
| 3.9 | Combinatorics | 1.3 | Combinatorics | |
| 26.1 | CommonMark | 37.4 | CommonMark | |
| 0.2 | CommonSolve | 0.2 | CommonSolve | |
| 0.4 | CommonSubexpressions | 0.2 | CommonSubexpressions | |
| 7.1 | CommonWorldInvalidations | 0.5 | CommonWorldInvalidations | |
| 0.2 | Compat | 0.2 | Compat | |
| 0.1 | Compat → CompatLinearAlgebraExt | 0.1 | Compat → CompatLinearAlgebraExt | |
| 0.3 | CompilerSupportLibraries_jll | 2 | CompilerSupportLibraries_jll | |
| 0.5 | CompositeTypes | 0.5 | CompositeTypes | |
| 0.1 | CompositionsBase | 0.2 | CompositionsBase | |
| 0.1 | CompositionsBase → CompositionsBaseInverseFunctionsExt | 0.1 | CompositionsBase → CompositionsBaseInverseFunctionsExt | |
| 0.3 | ConcreteStructs | 0.2 | ConcreteStructs | |
| 0.2 | ConstructionBase | 0.3 | ConstructionBase | |
| 0.3 | ConstructionBase → ConstructionBaseIntervalSetsExt | 0.2 | ConstructionBase → ConstructionBaseIntervalSetsExt | |
| 0.2 | ConstructionBase → ConstructionBaseLinearAlgebraExt | 0.2 | ConstructionBase → ConstructionBaseLinearAlgebraExt | |
| 0.5 | ConstructionBase → ConstructionBaseStaticArraysExt | 0.3 | ConstructionBase → ConstructionBaseStaticArraysExt | |
| 0.8 | CpuId | 0.5 | CpuId | |
| 39.3 | CPUSummary 94.08% compilation time (84% recompilation) | 10.2 | CPUSummary 62.13% compilation time | |
| 2.9 | Crayons | 6.3 | Crayons | |
| 0.3 | DataAPI | 0.4 | DataAPI | |
| 33.4 | DataStructures | 11.6 | DataStructures | |
| 0.1 | DataValueInterfaces | 0.1 | DataValueInterfaces | |
| 34.8 | Dates | 34.8 | ||
| 2 | DiffEqBase | 2 | DiffEqBase | |
| 0.3 | DiffEqBase → DiffEqBaseChainRulesCoreExt | 0.2 | DiffEqBase → DiffEqBaseChainRulesCoreExt | |
| 0.3 | DiffEqBase → DiffEqBaseDistributionsExt | 0.2 | DiffEqBase → DiffEqBaseDistributionsExt | |
| 1.2 | DiffEqBase → DiffEqBaseForwardDiffExt | 1.4 | DiffEqBase → DiffEqBaseForwardDiffExt | |
| 0.2 | DiffEqBase → DiffEqBaseSparseArraysExt | 0.2 | DiffEqBase → DiffEqBaseSparseArraysExt | |
| 0.4 | DiffEqBase → DiffEqBaseUnitfulExt | 0.4 | DiffEqBase → DiffEqBaseUnitfulExt | |
| 6.8 | DiffEqCallbacks | 1.7 | DiffEqCallbacks | |
| 2.9 | DiffEqNoiseProcess | 2.7 | DiffEqNoiseProcess | |
| 3.9 | DifferentiationInterface | 0.2 | DifferentiationInterface → DifferentiationInterfaceChainRulesCoreExt | |
| 0.2 | DifferentiationInterface → DifferentiationInterfaceChainRulesCoreExt | 0.5 | DifferentiationInterface → DifferentiationInterfaceFiniteDiffExt | |
| 0.6 | DifferentiationInterface → DifferentiationInterfaceFiniteDiffExt | 1.1 | DifferentiationInterface → DifferentiationInterfaceForwardDiffExt | |
| 1.4 | DifferentiationInterface → DifferentiationInterfaceForwardDiffExt | 0.2 | DifferentiationInterface → DifferentiationInterfaceGPUArraysCoreExt | |
| 0.2 | DifferentiationInterface → DifferentiationInterfaceGPUArraysCoreExt | 0.1 | DifferentiationInterface → DifferentiationInterfaceSparseArraysExt | |
| 0.2 | DifferentiationInterface → DifferentiationInterfaceSparseArraysExt | 0.8 | DifferentiationInterface → DifferentiationInterfaceSparseMatrixColoringsExt | |
| 1 | DifferentiationInterface → DifferentiationInterfaceSparseMatrixColoringsExt | 0.2 | DifferentiationInterface → DifferentiationInterfaceStaticArraysExt | |
| 0.2 | DifferentiationInterface → DifferentiationInterfaceStaticArraysExt | 0.6 | DifferentiationInterface → DifferentiationInterfaceSymbolicsExt | |
| 0.6 | DifferentiationInterface → DifferentiationInterfaceSymbolicsExt | 9.5 | DifferentiationInterface 59.64% compilation time (100% recompilation) | |
| 2.3 | DiffResults | 0.6 | DiffResults | |
| 0.8 | DiffRules | 0.5 | DiffRules | |
| 7.3 | DispatchDoctor | 1.8 | DispatchDoctor | |
| 0.4 | DispatchDoctor → DispatchDoctorChainRulesCoreExt | 0.2 | DispatchDoctor → DispatchDoctorChainRulesCoreExt | |
| 0.3 | DispatchDoctor → DispatchDoctorEnzymeCoreExt | 0.3 | DispatchDoctor → DispatchDoctorEnzymeCoreExt | |
| 22.9 | Distributed 56.89% compilation time | 21.2 | Distributed 63.13% compilation time | |
| 70 | Distributions | 0.5 | Distributions → DistributionsChainRulesCoreExt | |
| 0.6 | Distributions → DistributionsChainRulesCoreExt | 0.2 | Distributions → DistributionsTestExt | |
| 0.7 | Distributions → DistributionsTestExt | 86.5 | Distributions 6.65% compilation time (100% recompilation) | |
| 1 | DocStringExtensions | 75.5 | DocStringExtensions 97.80% compilation time | |
| 38.7 | DomainSets | 19.7 | DomainSets | |
| 68.5 | Downloads | 68.5 | ||
| 10.1 | DynamicPolynomials | 5.5 | DynamicPolynomials | |
| 411.7 | DynamicQuantities | 158.8 | DynamicQuantities | |
| 21.4 | DynamicQuantities → DynamicQuantitiesLinearAlgebraExt | 11.1 | DynamicQuantities → DynamicQuantitiesLinearAlgebraExt | |
| 2.2 | DynamicQuantities → DynamicQuantitiesUnitfulExt | 1.4 | DynamicQuantities → DynamicQuantitiesUnitfulExt | |
| 0.5 | EnumX | 0.2 | EnumX | |
| 3.4 | EnzymeCore | 1.3 | EnzymeCore | |
| 0.1 | EnzymeCore → AdaptExt | 0.1 | EnzymeCore → AdaptExt | |
| 3.4 | ExproniconLite | 5.2 | ExproniconLite | |
| 0.3 | ExprTools | 0.3 | ExprTools | |
| 1.2 | FastBroadcast | 1.3 | FastBroadcast | |
| 0.2 | FastClosures | 0.2 | FastClosures | |
| 0.1 | FastPower | 0.1 | FastPower | |
| 0.1 | FastPower → FastPowerForwardDiffExt | 0.1 | FastPower → FastPowerForwardDiffExt | |
| 54.9 | FillArrays | 38.7 | FillArrays | |
| 0.2 | FillArrays → FillArraysPDMatsExt | 0.2 | FillArrays → FillArraysPDMatsExt | |
| 1.9 | FillArrays → FillArraysSparseArraysExt | 1.5 | FillArrays → FillArraysSparseArraysExt | |
| 0.3 | FillArrays → FillArraysStatisticsExt | 0.2 | FillArrays → FillArraysStatisticsExt | |
| 0.3 | FindFirstFunctions | 0.4 | FindFirstFunctions | |
| 1 | FiniteDiff | 1.1 | FiniteDiff | |
| 0.3 | FiniteDiff → FiniteDiffSparseArraysExt | 0.1 | FiniteDiff → FiniteDiffSparseArraysExt | |
| 0.2 | FiniteDiff → FiniteDiffStaticArraysExt | 0.2 | FiniteDiff → FiniteDiffStaticArraysExt | |
| 4.2 | Format | 3.1 | Format | |
| 66.6 | ForwardDiff | 23.9 | ForwardDiff | |
| 0.6 | ForwardDiff → ForwardDiffStaticArraysExt | 0.4 | ForwardDiff → ForwardDiffStaticArraysExt | |
| 4.9 | FunctionWrappers | 4.4 | FunctionWrappers | |
| 0.2 | FunctionWrappersWrappers | 0.2 | FunctionWrappersWrappers | |
| 1.6 | Functors | 1.1 | Functors | |
| 0.1 | Future | 0.1 | Future | |
| 1.6 | Glob | 0.5 | Glob | |
| 0.4 | GPUArraysCore | 0.3 | GPUArraysCore | |
| 16.9 | Graphs | 9.2 | Graphs | |
| 2.6 | HypergeometricFunctions | 0.7 | HypergeometricFunctions | |
| 0.1 | IfElse | 0.1 | IfElse | |
| 0.8 | ImplicitDiscreteSolve | 0.5 | ImplicitDiscreteSolve | |
| 0.3 | Inflate | 0.3 | Inflate | |
| 0.2 | IntegerMathUtils | 0.2 | IntegerMathUtils | |
| 1085.1 | IntelOpenMP_jll 99.93% compilation time | 1085.1 | ||
| 8 | IntervalSets | 5.1 | IntervalSets | |
| 0.2 | IntervalSets → IntervalSetsRandomExt | 0.2 | IntervalSets → IntervalSetsRandomExt | |
| 0.2 | IntervalSets → IntervalSetsRecipesBaseExt | 0.2 | IntervalSets → IntervalSetsRecipesBaseExt | |
| 0.1 | IntervalSets → IntervalSetsStatisticsExt | 0.1 | IntervalSets → IntervalSetsStatisticsExt | |
| 0.3 | InverseFunctions | 0.1 | InverseFunctions → InverseFunctionsDatesExt | |
| 0.1 | InverseFunctions → InverseFunctionsDatesExt | 0.1 | InverseFunctions → InverseFunctionsTestExt | |
| 0.2 | InverseFunctions → InverseFunctionsTestExt | 18.7 | InverseFunctions 94.80% compilation time (100% recompilation) | |
| 12.3 | IrrationalConstants | 5 | IrrationalConstants | |
| 0.1 | IteratorInterfaceExtensions | 0.1 | IteratorInterfaceExtensions | |
| 3.5 | Jieko | 31.2 | Jieko | |
| 0.4 | JLLWrappers | 0.4 | ||
| 34.3 | JuliaFormatter | 55.3 | JuliaFormatter | |
| 22.8 | JuliaSyntax | 81.8 | JuliaSyntax | |
| 12.2 | JumpProcesses | 5.5 | JumpProcesses | |
| 22.3 | Krylov | 9.8 | Krylov | |
| 8.6 | Latexify | 9.2 | Latexify | |
| 0.2 | Latexify → SparseArraysExt | 0.2 | Latexify → SparseArraysExt | |
| 1 | LaTeXStrings | 0.3 | LaTeXStrings | |
| 1.7 | LayoutPointers | 1.4 | LayoutPointers | |
| 65.5 | LazyArrays | 184.8 | LazyArrays | |
| 25.2 | LazyArrays → LazyArraysBlockArraysExt | 10.4 | LazyArrays → LazyArraysBlockArraysExt | |
| 0.2 | LazyArrays → LazyArraysStaticArraysExt | 0.2 | LazyArrays → LazyArraysStaticArraysExt | |
| 0.3 | LazyArtifacts | 0.3 | ||
| 1.4 | LibCURL | 1.4 | ||
| 0.3 | LibCURL_jll | 0.3 | ||
| 23.2 | LibGit2 | 23.2 | ||
| 0.3 | LibGit2_jll | 0.3 | ||
| 0.3 | LibSSH2_jll | 0.3 | ||
| 19.4 | LinearSolve | 40.8 | LinearSolve | |
| 0.6 | LinearSolve → LinearSolveEnzymeExt | 0.5 | LinearSolve → LinearSolveEnzymeExt | |
| 4.5 | LinearSolve → LinearSolveForwardDiffExt | 2 | LinearSolve → LinearSolveForwardDiffExt | |
| 28 | LinearSolve → LinearSolveSparseArraysExt | 23.7 | LinearSolve → LinearSolveSparseArraysExt | |
| 1.9 | LineSearch | 2.5 | LineSearch | |
| 0.4 | LineSearch → LineSearchLineSearchesExt | 0.5 | LineSearch → LineSearchLineSearchesExt | |
| 6 | LineSearches | 1.3 | LineSearches | |
| 0.5 | LogExpFunctions | 0.3 | LogExpFunctions | |
| 0.7 | LogExpFunctions → LogExpFunctionsChainRulesCoreExt | 0.3 | LogExpFunctions → LogExpFunctionsChainRulesCoreExt | |
| 0.3 | LogExpFunctions → LogExpFunctionsInverseFunctionsExt | 0.2 | LogExpFunctions → LogExpFunctionsInverseFunctionsExt | |
| 0.1 | Logging | 0.1 | ||
| 3.7 | MacroTools | 5.9 | MacroTools | |
| 0.7 | ManualMemory | 0.6 | ManualMemory | |
| 0.7 | MaybeInplace | 0.6 | MaybeInplace | |
| 0.2 | MaybeInplace → MaybeInplaceSparseArraysExt | 0.2 | MaybeInplace → MaybeInplaceSparseArraysExt | |
| 5.1 | Missings | 2.9 | Missings | |
| 1.4 | MKL_jll | 1.4 | MKL_jll | |
| 51.6 | MLStyle | 61.9 | MLStyle | |
| 0.3 | Mmap | 0.3 | Mmap | |
| 878.3 | ModelingToolkit | 1023.9 | ModelingToolkit | |
| 149.8 | Moshi | 35.9 | Moshi | |
| 0.1 | MozillaCACerts_jll | |||
| 0.2 | MuladdMacro | 0.2 | MuladdMacro | 0.1 |
| 41.9 | MultivariatePolynomials | 16.1 | MultivariatePolynomials | |
| 145.9 | MutableArithmetics | 90.8 | MutableArithmetics | |
| 0.3 | NaNMath | 0.2 | NaNMath | |
| 0.6 | NetworkOptions | 0.6 | ||
| 0.3 | nghttp2_jll | 0.3 | ||
| 5.9 | NLSolversBase | 2 | NLSolversBase | |
| 49.4 | NonlinearSolve | 70.7 | NonlinearSolve | |
| 7.5 | NonlinearSolveBase | 4.3 | NonlinearSolveBase | |
| 0.2 | NonlinearSolveBase → NonlinearSolveBaseDiffEqBaseExt | 0.2 | NonlinearSolveBase → NonlinearSolveBaseDiffEqBaseExt | |
| 0.4 | NonlinearSolveBase → NonlinearSolveBaseForwardDiffExt | 0.3 | NonlinearSolveBase → NonlinearSolveBaseForwardDiffExt | |
| 0.2 | NonlinearSolveBase → NonlinearSolveBaseLinearSolveExt | 0.2 | NonlinearSolveBase → NonlinearSolveBaseLinearSolveExt | |
| 0.3 | NonlinearSolveBase → NonlinearSolveBaseLineSearchExt | 0.2 | NonlinearSolveBase → NonlinearSolveBaseLineSearchExt | |
| 0.2 | NonlinearSolveBase → NonlinearSolveBaseSparseArraysExt | 0.2 | NonlinearSolveBase → NonlinearSolveBaseSparseArraysExt | |
| 2.1 | NonlinearSolveBase → NonlinearSolveBaseSparseMatrixColoringsExt | 0.3 | NonlinearSolveBase → NonlinearSolveBaseSparseMatrixColoringsExt | |
| 179.7 | NonlinearSolveFirstOrder | 215.1 | NonlinearSolveFirstOrder | |
| 71.5 | NonlinearSolveQuasiNewton | 70.7 | NonlinearSolveQuasiNewton | |
| 0.7 | NonlinearSolveQuasiNewton → NonlinearSolveQuasiNewtonForwardDiffExt | 0.7 | NonlinearSolveQuasiNewton → NonlinearSolveQuasiNewtonForwardDiffExt | |
| 32.8 | NonlinearSolveSpectralMethods | 31.5 | NonlinearSolveSpectralMethods | |
| 0.6 | NonlinearSolveSpectralMethods → NonlinearSolveSpectralMethodsForwardDiffExt | 0.6 | NonlinearSolveSpectralMethods → NonlinearSolveSpectralMethodsForwardDiffExt | |
| 11.7 | OffsetArrays | 12.1 | OffsetArrays | |
| 0.5 | OffsetArrays → OffsetArraysAdaptExt | 0.3 | OffsetArrays → OffsetArraysAdaptExt | |
| 99.3 | oneTBB_jll 98.85% compilation time (100% recompilation) | 147.3 | oneTBB_jll 99.22% compilation time (100% recompilation) | |
| 0.2 | OpenLibm_jll | 1.4 | OpenLibm_jll | |
| 48.4 | OpenSpecFun_jll 98.82% compilation time (86% recompilation) | 0.3 | OpenSpecFun_jll | |
| 1 | OpenSSL_jll | 1 | ||
| 11.7 | Optim | 4.8 | Optim | |
| 6 | OrderedCollections | 1.8 | OrderedCollections | |
| 12.1 | OrdinaryDiffEqCore | 25.2 | OrdinaryDiffEqCore | |
| 0.7 | OrdinaryDiffEqCore → OrdinaryDiffEqCoreEnzymeCoreExt | 0.5 | OrdinaryDiffEqCore → OrdinaryDiffEqCoreEnzymeCoreExt | |
| 0.4 | p7zip_jll | 0.4 | ||
| 0.4 | Parameters | 0.3 | Parameters | |
| 12.3 | PDMats | 6.8 | PDMats | |
| 172 | Pkg | 172 | ||
| 0.2 | PoissonRandom | 0.2 | PoissonRandom | |
| 1.1 | Polyester | 0.5 | Polyester | |
| 5.8 | PolyesterWeave | 2.6 | PolyesterWeave | |
| 0.5 | PositiveFactorizations | 0.3 | PositiveFactorizations | |
| 0.2 | PrecompileTools | 0.2 | PrecompileTools | |
| 0.5 | Preferences | |||
| 31.6 | PrettyTables | 48 | PrettyTables | |
| 4.7 | Primes | 4.5 | Primes | |
| 1.6 | Printf | |||
| 0.3 | PtrArrays | 0.3 | PtrArrays | |
| 2.9 | QuadGK | 1.9 | QuadGK | |
| 1.7 | Random123 | 1.5 | Random123 | |
| 5.2 | RandomNumbers | 8.4 | RandomNumbers | |
| 2.5 | RecipesBase | 9.8 | RecipesBase | |
| 24.3 | RecursiveArrayTools | 14.5 | RecursiveArrayTools | |
| 0.2 | RecursiveArrayTools → RecursiveArrayToolsFastBroadcastExt | 0.2 | RecursiveArrayTools → RecursiveArrayToolsFastBroadcastExt | |
| 0.2 | RecursiveArrayTools → RecursiveArrayToolsForwardDiffExt | 0.2 | RecursiveArrayTools → RecursiveArrayToolsForwardDiffExt | |
| 0.2 | RecursiveArrayTools → RecursiveArrayToolsSparseArraysExt | 0.3 | RecursiveArrayTools → RecursiveArrayToolsSparseArraysExt | |
| 0.1 | Reexport | 0.2 | Reexport | |
| 0.3 | ResettableStacks | 0.2 | ResettableStacks | |
| 0.8 | Rmath | 1.8 | Rmath | |
| 0.5 | Rmath_jll | 0.3 | Rmath_jll | |
| 0.7 | RuntimeGeneratedFunctions | 0.4 | RuntimeGeneratedFunctions | |
| 0.3 | SCCNonlinearSolve | 0.4 | SCCNonlinearSolve | |
| 101.8 | SciMLBase | 0.3 | SciMLBase → SciMLBaseChainRulesCoreExt | |
| 0.9 | SciMLBase → SciMLBaseChainRulesCoreExt | 0.4 | SciMLBase → SciMLBaseMLStyleExt | |
| 0.4 | SciMLBase → SciMLBaseMLStyleExt | 63.5 | SciMLBase 15.94% compilation time (100% recompilation) | |
| 1.7 | SciMLJacobianOperators | 1.1 | SciMLJacobianOperators | |
| 20 | SciMLOperators | 7.1 | SciMLOperators | |
| 0.1 | SciMLOperators → SciMLOperatorsSparseArraysExt | 0.1 | SciMLOperators → SciMLOperatorsSparseArraysExt | |
| 0.2 | SciMLOperators → SciMLOperatorsStaticArraysCoreExt | 0.2 | SciMLOperators → SciMLOperatorsStaticArraysCoreExt | |
| 0.5 | SciMLPublic | 0.4 | SciMLPublic | |
| 0.3 | SciMLStructures | 0.3 | SciMLStructures | |
| 0.7 | Serialization | 0.6 | Serialization | |
| 6.9 | Setfield | 4.7 | Setfield | |
| 4.6 | SharedArrays | 1.9 | SharedArrays | |
| 0.2 | SIMDTypes | 0.2 | SIMDTypes | |
| 17 | SimpleNonlinearSolve | 38 | SimpleNonlinearSolve | |
| 0.2 | SimpleNonlinearSolve → SimpleNonlinearSolveChainRulesCoreExt | 0.2 | SimpleNonlinearSolve → SimpleNonlinearSolveChainRulesCoreExt | |
| 0.2 | SimpleNonlinearSolve → SimpleNonlinearSolveDiffEqBaseExt | 0.2 | SimpleNonlinearSolve → SimpleNonlinearSolveDiffEqBaseExt | |
| 0.6 | SimpleTraits | 0.3 | SimpleTraits | |
| 0.2 | SimpleUnPack | 0.2 | SimpleUnPack | |
| 0.5 | SortingAlgorithms | 0.5 | SortingAlgorith | |
| 143.3 | SparseArrays | 113.3 | SparseArrays 4.44% compilation time | |
| 13.9 | SparseMatrixColorings | 20.4 | SparseMatrixColorings | |
| 39.2 | SpecialFunctions | 4.2 | SpecialFunctions | |
| 2.4 | SpecialFunctions → SpecialFunctionsChainRulesCoreExt | 0.5 | SpecialFunctions → SpecialFunctionsChainRulesCoreExt | |
| 38 | Static | 13.2 | Static | |
| 20.8 | StaticArrayInterface | 2.7 | StaticArrayInterface | |
| 1.2 | StaticArrayInterface → StaticArrayInterfaceOffsetArraysExt | 0.5 | StaticArrayInterface → StaticArrayInterfaceOffsetArraysExt | |
| 3.1 | StaticArrayInterface → StaticArrayInterfaceStaticArraysExt | 0.8 | StaticArrayInterface → StaticArrayInterfaceStaticArraysExt | |
| 100.8 | StaticArrays | 99.9 | StaticArrays | |
| 0.3 | StaticArrays → StaticArraysChainRulesCoreExt | 0.2 | StaticArrays → StaticArraysChainRulesCoreExt | |
| 0.2 | StaticArrays → StaticArraysStatisticsExt | 0.2 | StaticArrays → StaticArraysStatisticsExt | |
| 1 | StaticArraysCore | 0.4 | StaticArraysCore | |
| 0.9 | Statistics | 0.6 | Statistics | |
| 0.2 | Statistics → SparseArraysExt | 0.1 | Statistics → SparseArraysExt | |
| 0.3 | StatsAPI | 0.3 | StatsAPI | |
| 12.2 | StatsBase | 8.6 | StatsBase | |
| 1.8 | StatsFuns | 2.7 | StatsFuns | |
| 0.5 | StatsFuns → StatsFunsChainRulesCoreExt | 0.2 | StatsFuns → StatsFunsChainRulesCoreExt | |
| 0.2 | StatsFuns → StatsFunsInverseFunctionsExt | 0.2 | StatsFuns → StatsFunsInverseFunctionsExt | |
| 51.3 | StrideArraysCore | 7.4 | StrideArraysCore | |
| 1.3 | StringManipulation | 4.4 | StringManipulation | |
| 0.2 | SuiteSparse | 0.2 | SuiteSparse | |
| 0.9 | SuiteSparse_jll | 2.4 | SuiteSparse_jll | |
| 3.2 | SymbolicIndexingInterface | 2.4 | SymbolicIndexingInterface | |
| 2.7 | SymbolicLimits | 0.4 | SymbolicLimits | |
| 143.7 | Symbolics | 79.8 | Symbolics | |
| 3.5 | Symbolics → SymbolicsForwardDiffExt | 8 | Symbolics → SymbolicsForwardDiffExt | |
| 90.8 | SymbolicUtils | 78.7 | SymbolicUtils | |
| 14.4 | Tables | 5.5 | Tables | |
| 0.1 | TableTraits | 0.1 | TableTraits | |
| 2.7 | Tar | 2.7 | ||
| 0.3 | TaskLocalValues | 0.3 | TaskLocalValues | |
| 0.2 | TermInterface | 0.1 | TermInterface | |
| 16.7 | Test | 18.9 | Test | |
| 0.2 | TestItems | 0.1 | TestIte | |
| 0.7 | ThreadingUtilities | 3.8 | ThreadingUtilities | |
| 5.4 | TimerOutputs | 11.8 | TimerOutputs | |
| 0.5 | TOML | 0.5 | ||
| 0.2 | TruncatedStacktraces | 0.1 | TruncatedStacktraces | |
| 107.8 | Unitful | 95.2 | Unitful | |
| 0.1 | Unitful → ConstructionBaseUnitfulExt | 0.1 | Unitful → ConstructionBaseUnitfulExt | |
| 0.4 | Unitful → ForwardDiffExt | 0.3 | Unitful → ForwardDiffExt | |
| 0.2 | Unitful → InverseFunctionsUnitfulExt | 0.1 | Unitful → InverseFunctionsUnitfulExt | |
| 0.6 | Unitful → PrintfExt | 0.4 | Unitful → PrintfExt | |
| 0.9 | Unityper | 0.2 | Unityper | |
| 0.1 | UnPack | 0.1 | UnPack | |
| 4.1 | URIs | 1.9 | URIs | |
| 0.1 | UUIDs | 0.1 | ||
| 1.1 | WeakValueDicts | 0.4 | WeakValueDicts | |
| 0.2 | Zlib_jll | 0.2 | ||
| Total extra packages | 1400.3 |
Interesting: 1401ms of the extra load time comes from extra packages that get loaded when using Julia 1.12, compared to using Julia 1.11.
The largest contributor is IntelOpenMP_jll with more than 1s load time (not getting loaded when using Julia 1.11).
The following packages get loaded with Julia 1.12, but not with Julia 1.11:
- ArgTools
- Dates
- Downloads
- IntelOpenMP
- JLLWrappers
- LazyArtifacts
- LibCURL
- LibCURL_jll
- LibGit2
- LibGit2_jll
- LibSSH2_jll
- Logging
- MozillaCACerts_jll
- NetworkOptions
- nghttp2_jll
- OpenSSL_jll
- p7zip_jll
- Pkg
Any idea why?
@ufechner7 I believe it's because Pkg moved out of the sysimage. There are a lot of packages that depend on Pkg for bad reasons.
And why is IntelOpenMP_jll loaded with 1.12 and not with 1.11? It has a very long load time due to re-compilation.
(@v1.12) pkg> why IntelOpenMP_jll
IntelOpenMP_jll
ModelingToolkit → NonlinearSolve → LinearSolve → MKL_jll → IntelOpenMP_jll
ModelingToolkit → NonlinearSolve → NonlinearSolveFirstOrder → LinearSolve → MKL_jll → IntelOpenMP_jll
ModelingToolkit → NonlinearSolve → NonlinearSolveQuasiNewton → LinearSolve → MKL_jll → IntelOpenMP_jll
I believe it's because Pkg moved out of the sysimage.
Pkg is not in the sysimage in 1.11 either.
And why is IntelOpenMP_jll loaded with 1.12 and not with 1.11?
I don't think that is true, I see that they get loaded on both 1.12 and 1.11.
julia> @time using ModelingToolkit
5.438113 seconds (16.04 M allocations: 934.729 MiB, 11.55% gc time, 21.06% compilation time: 27% of which was recompilation)
julia> @time using ModelingToolkit
3.882277 seconds (6.22 M allocations: 390.898 MiB, 9.52% gc time, 6.70% compilation time: 66% of which was recompilation)
This is what I get from @time_imports (sorted on the biggest absolute diff in load time in ms and not showing packages with very small load time):
| Package | v1.11 | v1.12 | Diff |
|---|---|---|---|
| IntelOpenMP_jll | 133.6 | 920.9 | +787.3 (+589%) |
| DynamicQuantities | 164.1 | 338.6 | +174.5 (+106%) |
| Symbolics | 70.1 | 243.6 | +173.5 (+248%) |
| BlockArrays | 121.5 | 229.4 | +107.9 (+89%) |
| oneTBB_jll | 0.7 | 91.9 | +91.2 (+13029%) |
| ArrayLayouts | 148.4 | 208.9 | +60.5 (+41%) |
| MutableArithmetics | 89.8 | 144.8 | +55.0 (+61%) |
| SparseArrays | 89.7 | 140.4 | +50.7 (+57%) |
| ForwardDiff | 21.0 | 61.5 | +40.5 (+193%) |
| OpenSpecFun_jll | 2.8 | 42.3 | +39.5 (+1411%) |
| SpecialFunctionsChainRulesCoreExt | 0.4 | 36.0 | +35.6 (+8900%) |
| MultivariatePolynomials | 12.3 | 39.1 | +26.8 (+218%) |
| CPUSummary | 9.4 | 36.0 | +26.6 (+283%) |
| Pkg | 185.2 | 211.3 | +26.1 (+14%) |
| Static | 8.8 | 32.0 | +23.2 (+264%) |
| DataStructures | 8.8 | 30.7 | +21.9 (+249%) |
| DomainSets | 15.2 | 36.8 | +21.6 (+142%) |
| FillArrays | 33.2 | 53.2 | +20.0 (+60%) |
| Dates | 11.4 | 30.2 | +18.8 (+165%) |
| SciMLBase | 82.4 | 99.3 | +16.9 (+21%) |
| StaticArrayInterface | 2.2 | 17.8 | +15.6 (+709%) |
| Distributions | 49.2 | 63.0 | +13.8 (+28%) |
| LazyArraysBlockArraysExt | 8.4 | 19.9 | +11.5 (+137%) |
| SciMLOperators | 6.2 | 16.3 | +10.1 (+163%) |
| Tables | 4.0 | 13.4 | +9.4 (+235%) |
| ... |
- Sum of all load times in v1.11: 3739.4 ms
- Sum of all load times in v1.12: 5299.5 ms
- Difference in total load time: +1560.1 ms (+41.7%)
Making jlls more robust to invalidations would be one big improvement
I did some work on JLL invalidations but that might not have gotten to 1.12
You mean https://github.com/JuliaPackaging/JLLWrappers.jl/pull/75? That's not in a release.
And https://github.com/JuliaLang/julia/pull/58436 https://github.com/JuliaLang/julia/pull/58473
I don't think that has much to do with invalidation causing a 1s load time of a jll.
With https://github.com/JuliaLang/julia/pull/58948 + https://github.com/JuliaLang/julia/pull/58957 on the 1.12 branch I get
julia> VERSION
v"1.11.6"
julia> @time using ModelingToolkit
3.932297 seconds (6.34 M allocations: 459.370 MiB, 8.66% gc time, 6.75% compilation time: 65% of which was recompilation)
julia> VERSION
v"1.12.0-beta4.88"
julia> @time using ModelingToolkit
3.297746 seconds (6.86 M allocations: 453.125 MiB, 11.20% gc time, 6.45% compilation time: 13% of which was recompilation)
Closing based on https://github.com/JuliaLang/julia/issues/57436#issuecomment-3056753975.