diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 7f497836d..a924d95d3 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -701,8 +701,8 @@ Options controlling Ceres configuration #. ``BUILD_DOCUMENTATION [Default: OFF]``: Use this to enable building the documentation, requires `Sphinx `_ and - the `sphinx-better-theme - `_ package + the `sphinx-rtd-theme + `_ package available from the Python package index. In addition, ``make ceres_docs`` can be used to build only the documentation. diff --git a/docs/source/nnls_solving.rst b/docs/source/nnls_solving.rst index 5ee0b03d8..3c8ecbbbe 100644 --- a/docs/source/nnls_solving.rst +++ b/docs/source/nnls_solving.rst @@ -1408,7 +1408,7 @@ elimination group [LiSaad]_. computed Schur complement. This can improve the performance of the ``ITERATIVE_SCHUR`` solver significantly. - .. NOTE: + .. NOTE:: This option can only be used with the ``SCHUR_JACOBI`` preconditioner. @@ -1453,6 +1453,36 @@ elimination group [LiSaad]_. This setting only affects the `SPARSE_NORMAL_CHOLESKY` solver. +.. member:: bool Solver::Options::use_mixed_precision_solves + + Default: ``false`` + + .. NOTE:: + + This feature is EXPERIMENTAL and under development, use at your + own risk! + + If true, the Gauss-Newton matrix is computed in *double* precision, but + its factorization is computed in **single** precision. This can result in + significant time and memory savings at the cost of some accuracy in the + Gauss-Newton step. Iterative refinement is used to recover some + of this accuracy back. + + If ``use_mixed_precision_solves`` is true, we recommend setting + ``max_num_refinement_iterations`` to 2-3. + + This option is currently only available if + ``sparse_linear_algebra_library_type`` is ``EIGEN_SPARSE`` or + ``ACCELERATE_SPARSE``, and ``linear_solver_type`` is + ``SPARSE_NORMAL_CHOLESKY`` or ``SPARSE_SCHUR``. + +.. member:: int Solver::Options::max_num_refinement_iterations + + Default: ``0`` + + Number steps of the iterative refinement process to run when + computing the Gauss-Newton step, see ``use_mixed_precision_solves``. + .. member:: int Solver::Options::min_linear_solver_iterations Default: ``0`` diff --git a/include/ceres/solver.h b/include/ceres/solver.h index 61b8dd53e..74fb30035 100644 --- a/include/ceres/solver.h +++ b/include/ceres/solver.h @@ -536,8 +536,9 @@ class CERES_EXPORT Solver { // max_num_refinement_iterations to 2-3. // // NOTE2: The following two options are currently only applicable - // if sparse_linear_algebra_library_type is EIGEN_SPARSE and - // linear_solver_type is SPARSE_NORMAL_CHOLESKY, or SPARSE_SCHUR. + // if sparse_linear_algebra_library_type is EIGEN_SPARSE or + // ACCELERATE_SPARSE, and linear_solver_type is SPARSE_NORMAL_CHOLESKY + // or SPARSE_SCHUR. bool use_mixed_precision_solves = false; // Number steps of the iterative refinement process to run when