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.
For more details, refer to the paper.
Supported linear solvers:
- Preconditioned Conjugate Gradients
- Eigen LDLT
- cuDSS
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).
See the examples folder. There are two examples:
circle.cu- Optimizes noisy 2D points along the radius of a circlebal.cu- Performs bundle adjustment
Graphite is released under the MIT License.
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.