Skip to content

sfu-rsl/graphite

Repository files navigation

Graphite

Graphite is a GPU-accelerated graph optimization framework based on CUDA. It lets you define an optimization problem in terms of unary, binary, and n-ary constraints, using types defined in C++, which may be useful for applications in robotics and computer vision such as SLAM. It also supports configurable floating point precisions as well as mixed-precision solving.

⚠️ Graphite is experimental. There may be several bugs, performance issues, and limitations. The interface and implementation may change over time.

For more details, refer to the paper.

Supported linear solvers:

  • Preconditioned Conjugate Gradients
  • Eigen LDLT
  • cuDSS

Building

You need a recent version of the CUDA Toolkit (e.g. >= 12.0), Eigen3, and cuDSS 0.7.0. Graphite can be built using CMake. A Dockerfile for development is also included, which can be used to create a devcontainer for VS Code (requires the NVIDIA Container Toolkit).

Examples

See the examples folder. There are two examples:

  • circle.cu - Optimizes noisy 2D points along the radius of a circle
  • bal.cu - Performs bundle adjustment

License

Graphite is released under the MIT License.

Contributing

If you would like to contribute features, bug fixes, code improvements, or tests, please open an issue or discussion first. Questions about usage are better suited for discussion.

About

Graphite is a GPU-accelerated nonlinear least squares graph optimization framework.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages