Hi,
my minimal example for DiffEqGPU.jl does not work unfortunately.
The MWE is (copy paste in Pluto):
# ╔═╡ fd1a977c-abca-11ed-2e82-315cc1b1716b
using DifferentialEquations, Zygote, CUDA,DiffEqGPU, StaticArrays
# ╔═╡ f54cc390-c4d9-4ae9-a221-2858c51c510b
function k(x)
sum(abs2, x)
end
# ╔═╡ 48e32a20-a4b8-45da-baec-e7f96f51c3b0
function f(z, _p, s)
p = z[1:2]
v = z[3:4]
dz12 = p .^ 2
dz34 = v .^ 2
return SVector{4}(dz12[1], dz12[2], dz34[1], dz34[2])
end
# ╔═╡ 06d08079-25e0-4c6f-9288-077ecc636f84
z0 = @SVector [0.0f0, 0.0f0, 0.0f0, 2.0f0]
# ╔═╡ 1e7f5534-47ab-4499-9406-852b6645e75e
sspan = (0f0, 100f0)
# ╔═╡ 5789d73f-ece1-46b8-94fe-2f729f9cff7a
f(z0, nothing, 1f0)
# ╔═╡ 57523dc7-cf9d-45d2-92f8-a060c8077db0
prob = ODEProblem(f, z0, sspan)
# ╔═╡ 108dccdd-9baf-4ae7-8155-95b6e0c25af3
@time sol = solve(prob, Tsit5());
# ╔═╡ 46c2884f-2a52-42c9-92c0-d685e39d9a7a
eprob = EnsembleProblem(prob, safetycopy = false)
# ╔═╡ 3a104348-bb0d-4a3a-ad0e-62f3c29c7d63
@time esol = solve(eprob, GPUTsit5(), EnsembleGPUArray(), trajectories=10_000)
The CPU version works but the GPU version throws that error.
I tried quite a few different versions of my code (in-place, without StaticArray, …) and none of them worked.
Is there something completely flawed with my approach?
Best,
Felix
Error Trace.
InvalidIRError: compiling kernel #gpu_gpu_kernel_oop(KernelAbstractions.CompilerMetadata{KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicCheck, Nothing, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, KernelAbstractions.NDIteration.NDRange{1, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}}}, typeof(Main.var"workspace#39".f), CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{SciMLBase.NullParameters, 1}, Float32) resulted in invalid LLVM IR
Reason: unsupported call through a literal pointer (call to ijl_alloc_array_1d)
Stacktrace:
[1] Array
@ ./boot.jl:459
[2] Array
@ ./boot.jl:468
[3] similar
@ ./abstractarray.jl:806
[4] similar
@ ./subarray.jl:65
[5] similar
@ ./abstractarray.jl:795
[6] _unsafe_getindex
@ ./multidimensional.jl:887
[7] multiple call sites
@ unknown:0
Reason: unsupported dynamic function invocation (call to print)
Stacktrace:
[1] print_to_string
@ ./strings/io.jl:144
Reason: unsupported call through a literal pointer (call to ijl_array_grow_end)
Stacktrace:
[1] _growend!
@ ./array.jl:1011
[2] resize!
@ ./array.jl:1236
[3] print_to_string
@ ./strings/io.jl:146
Reason: unsupported call through a literal pointer (call to ijl_array_del_end)
Stacktrace:
[1] _deleteend!
@ ./array.jl:1020
[2] resize!
@ ./array.jl:1241
[3] print_to_string
@ ./strings/io.jl:146
Reason: unsupported call through a literal pointer (call to ijl_array_to_string)
Stacktrace:
[1] String
@ ./strings/string.jl:55
[2] print_to_string
@ ./strings/io.jl:146
Reason: unsupported call through a literal pointer (call to ijl_alloc_string)
Stacktrace:
[1] _string_n
@ ./strings/string.jl:78
[2] StringVector
@ ./iobuffer.jl:31
[3] #IOBuffer#423
@ ./iobuffer.jl:114
[4] print_to_string
@ ./strings/io.jl:142
Reason: unsupported call through a literal pointer (call to ijl_string_to_array)
Stacktrace:
[1] unsafe_wrap
@ ./strings/string.jl:89
[2] StringVector
@ ./iobuffer.jl:31
[3] #IOBuffer#423
@ ./iobuffer.jl:114
[4] print_to_string
@ ./strings/io.jl:142
Reason: unsupported call through a literal pointer (call to ijl_alloc_array_1d)
Stacktrace:
[1] Array
@ ./boot.jl:459
[2] Array
@ ./boot.jl:468
[3] Array
@ ./boot.jl:476
[4] similar
@ ./abstractarray.jl:841
[5] similar
@ ./abstractarray.jl:840
[6] similar
@ ./broadcast.jl:212
[7] similar
@ ./broadcast.jl:211
[8] copy
@ ./broadcast.jl:885
[9] materialize
@ ./broadcast.jl:860
[10] f
@ ~/.julia/pluto_notebooks/Fascinating journal.jl#==#48e32a20-a4b8-45da-baec-e7f96f51c3b0:4
[11] macro expansion
@ ~/.julia/packages/DiffEqGPU/2OsE7/src/DiffEqGPU.jl:31
[12] gpu_gpu_kernel_oop
@ ~/.julia/packages/KernelAbstractions/C8flJ/src/macros.jl:81
[13] gpu_gpu_kernel_oop
@ ./none:0
Reason: unsupported call through a literal pointer (call to ijl_array_copy)
Stacktrace:
[1] copy
@ ./array.jl:369
[2] unaliascopy
@ ./abstractarray.jl:1443
[3] unalias
@ ./abstractarray.jl:1427
[4] broadcast_unalias
@ ./broadcast.jl:934
[5] preprocess
@ ./broadcast.jl:941
[6] preprocess_args (repeats 2 times)
@ ./broadcast.jl:943
[7] preprocess
@ ./broadcast.jl:940
[8] copyto!
@ ./broadcast.jl:957
[9] copyto!
@ ./broadcast.jl:913
[10] copy
@ ./broadcast.jl:885
[11] materialize
@ ./broadcast.jl:860
[12] f
@ ~/.julia/pluto_notebooks/Fascinating journal.jl#==#48e32a20-a4b8-45da-baec-e7f96f51c3b0:4
[13] macro expansion
@ ~/.julia/packages/DiffEqGPU/2OsE7/src/DiffEqGPU.jl:31
[14] gpu_gpu_kernel_oop
@ ~/.julia/packages/KernelAbstractions/C8flJ/src/macros.jl:81
[15] gpu_gpu_kernel_oop
@ ./none:0
Reason: unsupported call through a literal pointer (call to ijl_alloc_array_1d)
Stacktrace:
[1] Array
@ ./boot.jl:459
[2] Array
@ ./boot.jl:468
[3] Array
@ ./boot.jl:476
[4] similar
@ ./abstractarray.jl:841
[5] similar
@ ./abstractarray.jl:840
[6] similar
@ ./broadcast.jl:212
[7] similar
@ ./broadcast.jl:211
[8] copy
@ ./broadcast.jl:885
[9] materialize
@ ./broadcast.jl:860
[10] f
@ ~/.julia/pluto_notebooks/Fascinating journal.jl#==#48e32a20-a4b8-45da-baec-e7f96f51c3b0:5
[11] macro expansion
@ ~/.julia/packages/DiffEqGPU/2OsE7/src/DiffEqGPU.jl:31
[12] gpu_gpu_kernel_oop
@ ~/.julia/packages/KernelAbstractions/C8flJ/src/macros.jl:81
[13] gpu_gpu_kernel_oop
@ ./none:0
Reason: unsupported call through a literal pointer (call to ijl_array_copy)
Stacktrace:
[1] copy
@ ./array.jl:369
[2] unaliascopy
@ ./abstractarray.jl:1443
[3] unalias
@ ./abstractarray.jl:1427
[4] broadcast_unalias
@ ./broadcast.jl:934
[5] preprocess
@ ./broadcast.jl:941
[6] preprocess_args (repeats 2 times)
@ ./broadcast.jl:943
[7] preprocess
@ ./broadcast.jl:940
[8] copyto!
@ ./broadcast.jl:957
[9] copyto!
@ ./broadcast.jl:913
[10] copy
@ ./broadcast.jl:885
[11] materialize
@ ./broadcast.jl:860
[12] f
@ ~/.julia/pluto_notebooks/Fascinating journal.jl#==#48e32a20-a4b8-45da-baec-e7f96f51c3b0:5
[13] macro expansion
@ ~/.julia/packages/DiffEqGPU/2OsE7/src/DiffEqGPU.jl:31
[14] gpu_gpu_kernel_oop
@ ~/.julia/packages/KernelAbstractions/C8flJ/src/macros.jl:81
[15] gpu_gpu_kernel_oop
@ ./none:0
Hint: catch this exception as `err` and call `code_typed(err; interactive = true)` to introspect the erronous code with Cthulhu.jl
check_ir(::GPUCompiler.CompilerJob{GPUCompiler.PTXCompilerTarget, CUDA.CUDACompilerParams, GPUCompiler.FunctionSpec{typeof(DiffEqGPU.gpu_gpu_kernel_oop), Tuple{KernelAbstractions.CompilerMetadata{KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicCheck, Nothing, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, KernelAbstractions.NDIteration.NDRange{1, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}}}, typeof(Main.var"workspace#39".f), CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{SciMLBase.NullParameters, 1}, Float32}}}, ::LLVM.Module)@validation.jl:141
macro expansion@driver.jl:418[inlined]
macro expansion@TimerOutput.jl:253[inlined]
macro expansion@driver.jl:416[inlined]
var"#emit_asm#120"(::Bool, ::Bool, ::LLVM.API.LLVMCodeGenFileType, ::typeof(GPUCompiler.emit_asm), ::GPUCompiler.CompilerJob, ::LLVM.Module)@utils.jl:83
cufunction_compile(::GPUCompiler.CompilerJob, ::LLVM.Context)@execution.jl:355
#228@execution.jl:348[inlined]
JuliaContext(::CUDA.var"#228#229"{GPUCompiler.CompilerJob{GPUCompiler.PTXCompilerTarget, CUDA.CUDACompilerParams, GPUCompiler.FunctionSpec{typeof(DiffEqGPU.gpu_gpu_kernel_oop), Tuple{KernelAbstractions.CompilerMetadata{KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicCheck, Nothing, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, KernelAbstractions.NDIteration.NDRange{1, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}}}, typeof(Main.var"workspace#39".f), CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{SciMLBase.NullParameters, 1}, Float32}}}})@driver.jl:76
cufunction_compile(::GPUCompiler.CompilerJob)@execution.jl:347
cached_compilation(::Dict{UInt64, Any}, ::GPUCompiler.CompilerJob, ::typeof(CUDA.cufunction_compile), ::typeof(CUDA.cufunction_link))@cache.jl:90
var"#cufunction#225"(::Nothing, ::Bool, ::Base.Pairs{Symbol, Nothing, Tuple{Symbol}, NamedTuple{(:maxthreads,), Tuple{Nothing}}}, ::typeof(CUDA.cufunction), ::typeof(DiffEqGPU.gpu_gpu_kernel_oop), ::Type{Tuple{KernelAbstractions.CompilerMetadata{KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicCheck, Nothing, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, KernelAbstractions.NDIteration.NDRange{1, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}, CartesianIndices{1, Tuple{Base.OneTo{Int64}}}}}, typeof(Main.var"workspace#39".f), CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{Float32, 1}, CUDA.CuDeviceMatrix{SciMLBase.NullParameters, 1}, Float32}})@execution.jl:300
macro expansion@execution.jl:102[inlined]
var"#_#23"(::Int64, ::CUDAKernels.CudaEvent, ::Int64, ::Function, ::KernelAbstractions.Kernel{CUDAKernels.CUDADevice{false, false}, KernelAbstractions.NDIteration.DynamicSize, KernelAbstractions.NDIteration.DynamicSize, typeof(DiffEqGPU.gpu_gpu_kernel_oop)}, ::Function, ::Vararg{Any})@CUDAKernels.jl:283
(::DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)})(::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, ::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, ::CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, ::Float32)@DiffEqGPU.jl:832
ODEFunction@scimlfunctions.jl:2096[inlined]
initialize!(::OrdinaryDiffEq.ODEIntegrator{OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, true, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, Float32, Float32, Float32, Float32, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, SciMLBase.ODESolution{Float32, 3, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, true, CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, OrdinaryDiffEq.InterpolationData{SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.Tsit5Cache{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}}, DiffEqBase.DEStats, Nothing}, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.Tsit5Cache{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, OrdinaryDiffEq.PIController{Rational{Int64}}, typeof(DiffEqGPU.diffeqgpunorm), typeof(LinearAlgebra.opnorm), Nothing, SciMLBase.CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), DiffEqGPU.var"#15#21", DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, Tuple{}, Tuple{}}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, ::OrdinaryDiffEq.Tsit5Cache{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False})@low_order_rk_perform_step.jl:766
var"#__init#624"(::Tuple{}, ::Tuple{}, ::Tuple{}, ::Nothing, ::Bool, ::Bool, ::Bool, ::Nothing, ::Nothing, ::Bool, ::Bool, ::Float32, ::Nothing, ::Float32, ::Bool, ::Bool, ::Rational{Int64}, ::Nothing, ::Nothing, ::Rational{Int64}, ::Int64, ::Int64, ::Int64, ::Nothing, ::Nothing, ::Rational{Int64}, ::Nothing, ::Bool, ::Int64, ::Int64, ::typeof(DiffEqGPU.diffeqgpunorm), ::typeof(LinearAlgebra.opnorm), ::typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), ::DiffEqGPU.var"#15#21", ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Int64, ::String, ::typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), ::Nothing, ::Bool, ::Bool, ::Bool, ::Bool, ::OrdinaryDiffEq.DefaultInit, ::Base.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:default_set,), Tuple{Bool}}}, ::typeof(SciMLBase.__init), ::SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, true, CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::OrdinaryDiffEq.Tsit5{typeof(OrdinaryDiffEq.trivial_limiter!), typeof(OrdinaryDiffEq.trivial_limiter!), Static.False}, ::Tuple{}, ::Tuple{}, ::Tuple{}, ::Type{Val{true}})@solve.jl:499
#__solve#623@solve.jl:5[inlined]
var"#__solve#1"(::Bool, ::Base.Pairs{Symbol, Any, NTuple{4, Symbol}, NamedTuple{(:adaptive, :unstable_check, :callback, :internalnorm), Tuple{Bool, DiffEqGPU.var"#15#21", Nothing, typeof(DiffEqGPU.diffeqgpunorm)}}}, ::typeof(SciMLBase.__solve), ::SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, true, CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::DiffEqGPU.GPUTsit5)@default_solve.jl:9
#solve_call#22@solve.jl:494[inlined]
var"#solve_up#29"(::Base.Pairs{Symbol, Any, NTuple{5, Symbol}, NamedTuple{(:adaptive, :unstable_check, :callback, :merge_callbacks, :internalnorm), Tuple{Bool, DiffEqGPU.var"#15#21", Nothing, Bool, typeof(DiffEqGPU.diffeqgpunorm)}}}, ::typeof(DiffEqBase.solve_up), ::SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, true, CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::Nothing, ::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, ::CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, ::DiffEqGPU.GPUTsit5)@solve.jl:915
var"#solve#27"(::Nothing, ::Nothing, ::Nothing, ::Val{true}, ::Base.Pairs{Symbol, Any, NTuple{5, Symbol}, NamedTuple{(:adaptive, :unstable_check, :callback, :merge_callbacks, :internalnorm), Tuple{Bool, DiffEqGPU.var"#15#21", Nothing, Bool, typeof(DiffEqGPU.diffeqgpunorm)}}}, ::typeof(CommonSolve.solve), ::SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, true, CUDA.CuArray{SciMLBase.NullParameters, 2, CUDA.Mem.DeviceBuffer}, SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, DiffEqGPU.var"#67#71"{typeof(Main.var"workspace#39".f), typeof(DiffEqGPU.gpu_kernel_oop)}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::DiffEqGPU.GPUTsit5)@solve.jl:825
var"#batch_solve_up#44"(::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:adaptive, :unstable_check), Tuple{Bool, DiffEqGPU.var"#15#21"}}}, ::typeof(DiffEqGPU.batch_solve_up), ::SciMLBase.EnsembleProblem{SciMLBase.ODEProblem{StaticArraysCore.SVector{4, Float32}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(Main.var"workspace#39".f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, typeof(SciMLBase.DEFAULT_PROB_FUNC), typeof(SciMLBase.DEFAULT_OUTPUT_FUNC), typeof(SciMLBase.DEFAULT_REDUCTION), Nothing}, ::Vector{SciMLBase.ODEProblem{StaticArraysCore.SVector{4, Float32}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(Main.var"workspace#39".f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}}, ::DiffEqGPU.GPUTsit5, ::DiffEqGPU.EnsembleGPUArray, ::UnitRange{Int64}, ::Matrix{Float32}, ::Matrix{SciMLBase.NullParameters})@DiffEqGPU.jl:733
var"#batch_solve#22"(::Base.Pairs{Symbol, DiffEqGPU.var"#15#21", Tuple{Symbol}, NamedTuple{(:unstable_check,), Tuple{DiffEqGPU.var"#15#21"}}}, ::typeof(DiffEqGPU.batch_solve), ::SciMLBase.EnsembleProblem{SciMLBase.ODEProblem{StaticArraysCore.SVector{4, Float32}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(Main.var"workspace#39".f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, typeof(SciMLBase.DEFAULT_PROB_FUNC), typeof(SciMLBase.DEFAULT_OUTPUT_FUNC), typeof(SciMLBase.DEFAULT_REDUCTION), Nothing}, ::DiffEqGPU.GPUTsit5, ::DiffEqGPU.EnsembleGPUArray, ::UnitRange{Int64}, ::Bool)@DiffEqGPU.jl:671
macro expansion@timing.jl:382[inlined]
var"#__solve#10"(::Int64, ::Int64, ::Function, ::Bool, ::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(SciMLBase.__solve), ::SciMLBase.EnsembleProblem{SciMLBase.ODEProblem{StaticArraysCore.SVector{4, Float32}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(Main.var"workspace#39".f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, typeof(SciMLBase.DEFAULT_PROB_FUNC), typeof(SciMLBase.DEFAULT_OUTPUT_FUNC), typeof(SciMLBase.DEFAULT_REDUCTION), Nothing}, ::DiffEqGPU.GPUTsit5, ::DiffEqGPU.EnsembleGPUArray)@DiffEqGPU.jl:523
#solve#30@solve.jl:931[inlined]
macro expansion@Local: 262[inlined]
top-level scope@Local: 1[inlined]
``