Skip to content

Commit 5687e14

Browse files
Setup OpaqueClosures norecompile mode
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
1 parent 7ad0f62 commit 5687e14

File tree

1 file changed

+6
-45
lines changed

1 file changed

+6
-45
lines changed

src/norecompile.jl

Lines changed: 6 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
struct OrdinaryDiffEqTag end
22

3+
#=
34
const dualT = ForwardDiff.Dual{ForwardDiff.Tag{OrdinaryDiffEqTag,Float64},Float64,1}
45
const arglists = (Tuple{Vector{Float64},Vector{Float64},Vector{Float64},Float64},
56
Tuple{Vector{Float64},Vector{Float64},SciMLBase.NullParameters,Float64},
@@ -8,54 +9,14 @@ const arglists = (Tuple{Vector{Float64},Vector{Float64},Vector{Float64},Float64}
89
Tuple{Vector{dualT},Vector{dualT},SciMLBase.NullParameters,Float64},
910
Tuple{Vector{dualT},Vector{Float64},SciMLBase.NullParameters,dualT})
1011
const returnlists = ntuple(x -> Nothing, length(arglists))
11-
function void(@nospecialize(f::Function))
12-
function f2(@nospecialize(du::Vector{Float64}), @nospecialize(u::Vector{Float64}), @nospecialize(p::Vector{Float64}), @nospecialize(t::Float64))
13-
f(du, u, p, t)
14-
nothing
15-
end
16-
17-
function f2(@nospecialize(du::Vector{Float64}), @nospecialize(u::Vector{Float64}), @nospecialize(p::SciMLBase.NullParameters), @nospecialize(t::Float64))
18-
f(du, u, p, t)
19-
nothing
20-
end
21-
22-
function f2(@nospecialize(du::Vector{dualT}), @nospecialize(u::Vector{dualT}), @nospecialize(p::Vector{Float64}), @nospecialize(t::Float64))
23-
f(du, u, p, t)
24-
nothing
25-
end
26-
27-
function f2(@nospecialize(du::Vector{dualT}), @nospecialize(u::Vector{dualT}), @nospecialize(p::SciMLBase.NullParameters), @nospecialize(t::Float64))
28-
f(du, u, p, t)
29-
nothing
30-
end
31-
32-
function f2(@nospecialize(du::Vector{dualT}), @nospecialize(u::Vector{Float64}), @nospecialize(p::Vector{Float64}), @nospecialize(t::dualT))
33-
f(du, u, p, t)
34-
nothing
35-
end
36-
37-
function f2(@nospecialize(du::Vector{dualT}), @nospecialize(u::Vector{Float64}), @nospecialize(p::SciMLBase.NullParameters), @nospecialize(t::dualT))
38-
f(du, u, p, t)
39-
nothing
40-
end
41-
precompile(f, (Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64))
42-
precompile(f, (Vector{Float64}, Vector{Float64}, SciMLBase.NullParameters, Float64))
43-
precompile(f, (Vector{dualT}, Vector{dualT}, Vector{Float64}, Float64))
44-
precompile(f, (Vector{dualT}, Vector{dualT}, SciMLBase.NullParameters, Float64))
45-
precompile(f, (Vector{dualT}, Vector{Float64}, Vector{Float64}, dualT))
46-
precompile(f, (Vector{dualT}, Vector{Float64}, SciMLBase.NullParameters, dualT))
12+
=#
4713

48-
precompile(f2, (Vector{Float64}, Vector{Float64}, Vector{Float64}, Float64))
49-
precompile(f2, (Vector{Float64}, Vector{Float64}, SciMLBase.NullParameters, Float64))
50-
precompile(f2, (Vector{dualT}, Vector{dualT}, Vector{Float64}, Float64))
51-
precompile(f2, (Vector{dualT}, Vector{dualT}, SciMLBase.NullParameters, Float64))
52-
precompile(f2, (Vector{dualT}, Vector{Float64}, Vector{Float64}, dualT))
53-
precompile(f2, (Vector{dualT}, Vector{Float64}, SciMLBase.NullParameters, dualT))
54-
f2
14+
function void(f)
15+
Base.Experimental.@opaque (args...)->f(args...)
5516
end
5617

57-
const NORECOMPILE_FUNCTION = typeof(FunctionWrappersWrappers.FunctionWrappersWrapper(void(() -> nothing), arglists, returnlists))
58-
wrap_norecompile(f) = FunctionWrappersWrappers.FunctionWrappersWrapper(void(f), arglists, returnlists)
18+
const NORECOMPILE_FUNCTION = typeof(void(() -> nothing))
19+
wrap_norecompile(f) = void(f)
5920

6021
function ODEFunction{iip,false}(f;
6122
mass_matrix=I,

0 commit comments

Comments
 (0)