Skip to content

feat: cuda-oxide explicit runge kutta solver #299

Description

@martinjrobins
  • add an experimental solver using https://github.com/NVlabs/cuda-oxide called ExplicitRkOxide
  • explicit runge kutta, hopefully can reuse most of the code from runge_kutta.rs if its suitable for cuda-oxide
  • uses batching information from context (see feat: batching on linear algebra backends #298), constructs an array of OdeSolverState of length nbatch / warp_size, each warp operates on a single OdeSolverState (with nbatch_local = warp_size), so that each warp is an independent solver trajectory (i.e. each warp has its own dt=h)
  • logically, this solver is one thread = one solve. But the threads in a warp cooperate to use a shared timestepper, so threads in a warp never diverge
  • the array of OdeSolverState should probably live in shared memory, indexed by warp id.
  • uses a new linear algebra backend with nbatch_local = warp_size, that is called from device code, so reductions like squared_norm() are done at the warp level (max reduction across the warp, then broadcast to all threads in the warp)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions