SciML / DiffEqGPU.jl

GPU-acceleration routines for DifferentialEquations.jl and the broader SciML scientific machine learning ecosystem
https://docs.sciml.ai/DiffEqGPU/stable/
MIT License
272 stars 27 forks source link

allow linearsolve v2 #281

Closed ChrisRackauckas closed 1 year ago

maleadt commented 1 year ago

I'm getting stack overflows with DiffEqGPU+LinearSolve@2:

ERROR: LoadError: StackOverflowError:
Stacktrace:
  [1] solve!(::LinearSolve.LinearCache{…}, ::LinSolveGPUSplitFactorize, ::Vararg{…}; kwargs::@Kwargs{…}) (repeats 4785 times)
    @ LinearSolve /tmp/tmp.ib6qGQNM8f/packages/LinearSolve/tJWKq/src/common.jl:197
  [2] solve!(cache::LinearSolve.LinearCache{…}, args::LinSolveGPUSplitFactorize; kwargs::@Kwargs{…})
    @ LinearSolve /tmp/tmp.ib6qGQNM8f/packages/LinearSolve/tJWKq/src/common.jl:197
  [3] solve!(::LinearSolve.LinearCache{CuArray{…}, CuArray{…}, CuArray{…}, SciMLBase.NullParameters, LinSolveGPUSplitFactorize, LinSolveGPUSplitFactorize, LinearSolve.InvPreconditioner{…}, LinearAlgebra.Diagonal{…}, Float64, Bool}; kwargs::@Kwargs{reltol::Float64})
    @ LinearSolve /tmp/tmp.ib6qGQNM8f/packages/LinearSolve/tJWKq/src/common.jl:197
  [4] dolinsolve(integrator::OrdinaryDiffEq.ODEIntegrator{…}, linsolve::LinearSolve.LinearCache{…}; A::CuArray{…}, linu::Nothing, b::CuArray{…}, du::CuArray{…}, u::CuArray{…}, p::CuArray{…}, t::Float64, weight::CuArray{…}, solverdata::@NamedTuple{…}, reltol::Float64)
    @ OrdinaryDiffEq /tmp/tmp.ib6qGQNM8f/packages/OrdinaryDiffEq/2kdef/src/misc_utils.jl:107
  [5] perform_step!(integrator::OrdinaryDiffEq.ODEIntegrator{…}, cache::OrdinaryDiffEq.Rosenbrock5Cache{…}, repeat_step::Bool)
    @ OrdinaryDiffEq /tmp/tmp.ib6qGQNM8f/packages/OrdinaryDiffEq/2kdef/src/perform_step/rosenbrock_perform_step.jl:1670
  [6] perform_step!(integrator::OrdinaryDiffEq.ODEIntegrator{…}, cache::OrdinaryDiffEq.Rosenbrock5Cache{…})
    @ OrdinaryDiffEq /tmp/tmp.ib6qGQNM8f/packages/OrdinaryDiffEq/2kdef/src/perform_step/rosenbrock_perform_step.jl:1610
  [7] solve!(integrator::OrdinaryDiffEq.ODEIntegrator{…})
    @ OrdinaryDiffEq /tmp/tmp.ib6qGQNM8f/packages/OrdinaryDiffEq/2kdef/src/solve.jl:520
  [8] __solve(prob::Union{SciMLBase.AbstractDAEProblem, SciMLBase.AbstractODEProblem}, alg::Union{OrdinaryDiffEqAlgorithm, OrdinaryDiffEq.DAEAlgorithm}, args::Vararg{Any}; kwargs...)
    @ OrdinaryDiffEq /tmp/tmp.ib6qGQNM8f/packages/OrdinaryDiffEq/2kdef/src/solve.jl:6 [inlined]
  [9] __solve(prob::Union{SciMLBase.AbstractDAEProblem, SciMLBase.AbstractODEProblem}, alg::Union{OrdinaryDiffEqAlgorithm, OrdinaryDiffEq.DAEAlgorithm}, args::Vararg{Any})
    @ OrdinaryDiffEq /tmp/tmp.ib6qGQNM8f/packages/OrdinaryDiffEq/2kdef/src/solve.jl:1 [inlined]
 [10] solve_call(_prob::ODEProblem{…}, args::Rodas5{…}; merge_callbacks::Bool, kwargshandle::KeywordArgError, kwargs::@Kwargs{…})
    @ DiffEqBase /tmp/tmp.ib6qGQNM8f/packages/DiffEqBase/G15op/src/solve.jl:511
 [11] solve_up(prob::ODEProblem{…}, sensealg::Nothing, u0::CuArray{…}, p::CuArray{…}, args::Rodas5{…}; kwargs::@Kwargs{…})
    @ DiffEqBase /tmp/tmp.ib6qGQNM8f/packages/DiffEqBase/G15op/src/solve.jl:972
 [12] solve_up(prob::SciMLBase.AbstractDEProblem, sensealg::Any, u0::Any, p::Any, args::Vararg{Any})
    @ DiffEqBase /tmp/tmp.ib6qGQNM8f/packages/DiffEqBase/G15op/src/solve.jl:945 [inlined]
 [13] solve(prob::ODEProblem{…}, args::Rodas5{…}; sensealg::Nothing, u0::Nothing, p::Nothing, wrap::Val{…}, kwargs::@Kwargs{…})
    @ DiffEqBase /tmp/tmp.ib6qGQNM8f/packages/DiffEqBase/G15op/src/solve.jl:882
 [14] batch_solve_up(ensembleprob::EnsembleProblem{…}, probs::Vector{…}, alg::Rodas5{…}, ensemblealg::EnsembleGPUArray{…}, I::UnitRange{…}, u0::Matrix{…}, p::Matrix{…}; kwargs::@Kwargs{…})
    @ DiffEqGPU /tmp/tmp.ib6qGQNM8f/dev/DiffEqGPU/src/DiffEqGPU.jl:879
 [15] batch_solve(ensembleprob::EnsembleProblem{…}, alg::Rodas5{…}, ensemblealg::EnsembleGPUArray{…}, I::UnitRange{…}, adaptive::Bool; kwargs::@Kwargs{…})
    @ DiffEqGPU /tmp/tmp.ib6qGQNM8f/dev/DiffEqGPU/src/DiffEqGPU.jl:767
 [16] macro expansion
    @ DiffEqGPU ./timing.jl:395 [inlined]
 [17] __solve(ensembleprob::EnsembleProblem{…}, alg::Rodas5{…}, ensemblealg::EnsembleGPUArray{…}; trajectories::Int64, batch_size::Int64, unstable_check::Function, adaptive::Bool, kwargs::@Kwargs{…})
    @ DiffEqGPU /tmp/tmp.ib6qGQNM8f/dev/DiffEqGPU/src/DiffEqGPU.jl:594
 [18] solve(::EnsembleProblem{…}, ::Rodas5{…}, ::EnsembleGPUArray{…}; kwargs::@Kwargs{…})
    @ DiffEqBase /tmp/tmp.ib6qGQNM8f/packages/DiffEqBase/G15op/src/solve.jl:996 [inlined]
 [19] main()
    @ Main ~/wip.jl:34
 [20] top-level scope
    @ ~/wip.jl:38
oscardssmith commented 1 year ago

see also https://github.com/SciML/LinearSolve.jl/issues/331

ChrisRackauckas commented 1 year ago

Solved by https://github.com/SciML/DiffEqGPU.jl/pull/284