Skip to content

Setup OrdinaryDiffEq for norecompile mode #1627

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Aug 22, 2022
Merged

Setup OrdinaryDiffEq for norecompile mode #1627

merged 17 commits into from
Aug 22, 2022

Conversation

ChrisRackauckas
Copy link
Member

No description provided.

ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Mar 22, 2022
Needs:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```
2.763588 seconds (10.32 M allocations: 648.718 MiB, 4.92% gc time, 99.89% compilation time)

10.577789 seconds (45.44 M allocations: 2.760 GiB, 4.87% gc time, 99.97% compilation time)
```

While the types of `prob` are exactly the same, there is still a significant amount of compile time, even with that exact same time being called in `using` at OrdinaryDiffEq.

Maybe this needs to be run on master?
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Mar 25, 2022
Needs:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```
2.763588 seconds (10.32 M allocations: 648.718 MiB, 4.92% gc time, 99.89% compilation time)

10.577789 seconds (45.44 M allocations: 2.760 GiB, 4.87% gc time, 99.97% compilation time)
```

While the types of `prob` are exactly the same, there is still a significant amount of compile time, even with that exact same time being called in `using` at OrdinaryDiffEq.

Maybe this needs to be run on master?
@ChrisRackauckas ChrisRackauckas force-pushed the norecompile branch 2 times, most recently from 0e2f0a0 to 21516a9 Compare March 27, 2022 20:23
@ChrisRackauckas ChrisRackauckas force-pushed the norecompile branch 2 times, most recently from 6b46941 to 7859be4 Compare April 2, 2022 01:15
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Apr 22, 2022
Needs:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```
2.763588 seconds (10.32 M allocations: 648.718 MiB, 4.92% gc time, 99.89% compilation time)

10.577789 seconds (45.44 M allocations: 2.760 GiB, 4.87% gc time, 99.97% compilation time)
```

While the types of `prob` are exactly the same, there is still a significant amount of compile time, even with that exact same time being called in `using` at OrdinaryDiffEq.

Maybe this needs to be run on master?
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Apr 22, 2022
This is a continuation of #736 instead using OpaqueClosures. As such, it also requires:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

But now the MWE doesn't run:

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```julia
[ Info: Precompiling OrdinaryDiffEq [1dea7af3-3e70-54e6-95c3-0bf5283fa5ed]
fatal: error thrown and no exception handler available.
ErrorException("unimplemented: serialization of MethodInstances for OpaqueClosure")
jl_error at /cygdrive/c/buildbot/worker/package_win64/build/src\rtutils.c:41
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:686
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:526
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:661
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:675
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:834
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_datatype at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:310
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:605
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:357
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:345
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_save_incremental at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:2289
jl_write_compiler_output at /cygdrive/c/buildbot/worker/package_win64/build/src\precompile.c:65
jl_atexit_hook at /cygdrive/c/buildbot/worker/package_win64/build/src\init.c:211
jl_repl_entrypoint at /cygdrive/c/buildbot/worker/package_win64/build/src\jlapi.c:702
mainCRTStartup at /cygdrive/c/buildbot/worker/package_win64/build/cli\loader_exe.c:42
BaseThreadInitThunk at C:\WINDOWS\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line)
```

The precompilation from SciML/OrdinaryDiffEq.jl#1627 seems to not work with opaque closures. Do they not support precompilation? @Keno
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Aug 20, 2022
Needs:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```
2.763588 seconds (10.32 M allocations: 648.718 MiB, 4.92% gc time, 99.89% compilation time)

10.577789 seconds (45.44 M allocations: 2.760 GiB, 4.87% gc time, 99.97% compilation time)
```

While the types of `prob` are exactly the same, there is still a significant amount of compile time, even with that exact same time being called in `using` at OrdinaryDiffEq.

Maybe this needs to be run on master?
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Aug 20, 2022
This is a continuation of #736 instead using OpaqueClosures. As such, it also requires:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

But now the MWE doesn't run:

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```julia
[ Info: Precompiling OrdinaryDiffEq [1dea7af3-3e70-54e6-95c3-0bf5283fa5ed]
fatal: error thrown and no exception handler available.
ErrorException("unimplemented: serialization of MethodInstances for OpaqueClosure")
jl_error at /cygdrive/c/buildbot/worker/package_win64/build/src\rtutils.c:41
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:686
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:526
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:661
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:675
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:834
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_datatype at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:310
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:605
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:357
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:345
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_save_incremental at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:2289
jl_write_compiler_output at /cygdrive/c/buildbot/worker/package_win64/build/src\precompile.c:65
jl_atexit_hook at /cygdrive/c/buildbot/worker/package_win64/build/src\init.c:211
jl_repl_entrypoint at /cygdrive/c/buildbot/worker/package_win64/build/src\jlapi.c:702
mainCRTStartup at /cygdrive/c/buildbot/worker/package_win64/build/cli\loader_exe.c:42
BaseThreadInitThunk at C:\WINDOWS\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line)
```

The precompilation from SciML/OrdinaryDiffEq.jl#1627 seems to not work with opaque closures. Do they not support precompilation? @Keno
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Aug 20, 2022
This is a continuation of #736 instead using OpaqueClosures. As such, it also requires:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

But now the MWE doesn't run:

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```julia
[ Info: Precompiling OrdinaryDiffEq [1dea7af3-3e70-54e6-95c3-0bf5283fa5ed]
fatal: error thrown and no exception handler available.
ErrorException("unimplemented: serialization of MethodInstances for OpaqueClosure")
jl_error at /cygdrive/c/buildbot/worker/package_win64/build/src\rtutils.c:41
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:686
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:526
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:661
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:675
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:834
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_datatype at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:310
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:605
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:357
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:345
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_save_incremental at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:2289
jl_write_compiler_output at /cygdrive/c/buildbot/worker/package_win64/build/src\precompile.c:65
jl_atexit_hook at /cygdrive/c/buildbot/worker/package_win64/build/src\init.c:211
jl_repl_entrypoint at /cygdrive/c/buildbot/worker/package_win64/build/src\jlapi.c:702
mainCRTStartup at /cygdrive/c/buildbot/worker/package_win64/build/cli\loader_exe.c:42
BaseThreadInitThunk at C:\WINDOWS\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line)
```

The precompilation from SciML/OrdinaryDiffEq.jl#1627 seems to not work with opaque closures. Do they not support precompilation? @Keno
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Aug 20, 2022
This is a continuation of #736 instead using OpaqueClosures. As such, it also requires:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

But now the MWE doesn't run:

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```julia
[ Info: Precompiling OrdinaryDiffEq [1dea7af3-3e70-54e6-95c3-0bf5283fa5ed]
fatal: error thrown and no exception handler available.
ErrorException("unimplemented: serialization of MethodInstances for OpaqueClosure")
jl_error at /cygdrive/c/buildbot/worker/package_win64/build/src\rtutils.c:41
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:686
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:526
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:661
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:675
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:870
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:834
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_datatype at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:310
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:605
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:357
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_module at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:345
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:733
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:565
jl_serialize_value_ at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:510 [inlined]
jl_save_incremental at /cygdrive/c/buildbot/worker/package_win64/build/src\dump.c:2289
jl_write_compiler_output at /cygdrive/c/buildbot/worker/package_win64/build/src\precompile.c:65
jl_atexit_hook at /cygdrive/c/buildbot/worker/package_win64/build/src\init.c:211
jl_repl_entrypoint at /cygdrive/c/buildbot/worker/package_win64/build/src\jlapi.c:702
mainCRTStartup at /cygdrive/c/buildbot/worker/package_win64/build/cli\loader_exe.c:42
BaseThreadInitThunk at C:\WINDOWS\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line)
```

The precompilation from SciML/OrdinaryDiffEq.jl#1627 seems to not work with opaque closures. Do they not support precompilation? @Keno
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Aug 20, 2022
Needs:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```
2.763588 seconds (10.32 M allocations: 648.718 MiB, 4.92% gc time, 99.89% compilation time)

10.577789 seconds (45.44 M allocations: 2.760 GiB, 4.87% gc time, 99.97% compilation time)
```

While the types of `prob` are exactly the same, there is still a significant amount of compile time, even with that exact same time being called in `using` at OrdinaryDiffEq.

Maybe this needs to be run on master?
ChrisRackauckas added a commit to SciML/DiffEqBase.jl that referenced this pull request Aug 21, 2022
* Setup FunctionWrappersWrappers norecompile mode

Needs:

- SciML/SciMLBase.jl#143
- SciML/OrdinaryDiffEq.jl#1627

```julia
using OrdinaryDiffEq
function f(du, u, p, t)
    du[1] = 0.2u[1]
    du[2] = 0.4u[2]
end
u0 = ones(2)
tspan = (0.0, 1.0)
prob = ODEProblem{true,false}(f, u0, tspan, Float64[])

function lorenz(du, u, p, t)
    du[1] = 10.0(u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
lorenzprob = ODEProblem{true,false}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[])
typeof(prob) === typeof(lorenzprob) # true

@time sol = solve(prob, Rosenbrock23(autodiff=false))
@time sol = solve(prob, Rosenbrock23(chunk_size=1))
```

```
2.763588 seconds (10.32 M allocations: 648.718 MiB, 4.92% gc time, 99.89% compilation time)

10.577789 seconds (45.44 M allocations: 2.760 GiB, 4.87% gc time, 99.97% compilation time)
```

While the types of `prob` are exactly the same, there is still a significant amount of compile time, even with that exact same time being called in `using` at OrdinaryDiffEq.

Maybe this needs to be run on master?

* with extra specialization!

* try `@nospecialize` on the arguments

* force precompilation?

* try more

* no precompile file

* add sys

* do not require SciMLBase changes and support oop

* fix oop handling
@ChrisRackauckas ChrisRackauckas merged commit 79e966c into master Aug 22, 2022
@ChrisRackauckas ChrisRackauckas deleted the norecompile branch August 22, 2022 07:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant