Previously when using a natural ordering, we had postordering
turned off. This is not a good idea. Enabling postordering will
also has the possibility of improving the size of the supernodes.
Change-Id: I8c270e54751b8bed53b38a0b461f647f5c8f5640
This was an ill-advised and complicated to interpret option
which offers nothing particularly useful.
Change-Id: Ia7741ed62ef977c96fa52299a884e404bee659ac
Thanks to nate-thirdwave@ for pointing this out and offering
a fix.
Also add a TODO about an odd loop in covariance_impl.cc which was
revealed as I was testing the bazel build
https: //github.com/ceres-solver/ceres-solver/issues/800
Change-Id: I87d17155ee43ea2a52b8031177d6b3ac5ae1460a
With this change, the user can now choose between Approximate Minimum
Degree and Nested Dissection as a fill reducing algorithm when using
a sparse direct factorization based linear solver like SPARSE_NORMAL_CHOLESKY
or SPARSE_SCHUR.
Currenly only SUITE_SPARSE is supported. It requires that
SuiteSparse be compiled with Metis support enabled.
On most problems AMD is still the better choice, but in some cases
like the grid3D dataset from https://lucacarlone.mit.edu/datasets/
the solution time with AMD is 57s and with NESDIS 38 on my M1 Mac.
On some other problems at Google we have observed speedups of 10x,
there is also a corresponding decrease in the total amount of memory
used.
This patch is based on the original work done by NeroBurner in
https://ceres-solver-review.googlesource.com/c/ceres-solver/+/20580
1. Add a new enum to the public api LinearSolverOrderingType and
a setting Solver::Options::linear_solver_ordering_type.
2. TrustRegionPreprocessor had some complicated logic which determined
when linear solvers should reorder their matrices on their own and not
this has been refactored into a more readable function that lives
inside reorder_program.h/cc.
3. Plumbing in reorder_program.cc and trust_region_processor.cc to use
nested dissection.
4. Update bundle_adjuster.cc to use nested dissection.
Change-Id: I388b027934f86c58b4da2b65a4fa5204ea73bf40
1. Generalize SuiteSparse::AnalyzeCholesky and
SuiteSparse::BlockAnalyzeCholesky from just doing AMD to taking
OrderingType as an argument and using that to determine whether
AMD & Nested Dissection algorithms are used for computing the
fill-reducing ordering or a natural ordering when computing
the symbolic factorization.
2. Remove AnalyzeCholeskyWithNaturalOrdering.
3. Replace and generalize SuiteSparse::BlockAMDOrdering with
SuiteSparse::BlockOrdering which also takes OrderingType as an
argument. Same for SuiteSparse::ApproximateMinimumDegreeOrdering
and SuiteSparse::NestedDissectionOrdering by
SuiteSparse::Ordering.
4. Remove LinearSolver::Options::use_postordering and replace it
with LinearSolver::Options::ordering_type.
5. Replace Preconditioner::Options::use_postordering and replace it
with Preconditioner::Options::ordering_type.
6. Add NESDIS to OrderingType. With the above changes, the linear
solvers can now use Nested Dissection once this information
is piped through the nonlinear solver.
Change-Id: Ib8e93fbf34ae2981bf2ac54dcda9e25c7c213790
With this change we can drop the complicated/conditional handling
around CAMD and assume that it is always available.
Change-Id: I93e1da676fb75817f79824b8b2b6549d03f278b0
* Ubuntu 18.04 GCC does not fully support C++17, hence remove the
runner.
* Using CMake SuiteSparse in a C++17 project requires a workaround
implemented in a recent release.
Change-Id: I9985fe12d582dfc9b74e97d670828334e507e9f5
Instead of having four separate scalars, allocate them as
an array as they are all touched as a group of four.
Change-Id: I773cfc08cf53b66032985c11a4b0ebc06db06083
1. Update the cff file to be more inclusive.
2. Update the BibTeX entry in index.rst to match the one generated
by GitHub.
Change-Id: I26d031b2128d1d4330623bcdace284ca9ffce9e1
The last item in the 'New Features' section restarts the enumeration
because the indention of the previous subitem is one space short.
Change-Id: Ifa2873d3e2ddd6bac5034b48207775019ef1c462
This makes citations accessible directly on Github and allows users to
automatically generate citations in APA and BibTeX format.
Change-Id: Ic5eb3857c92d93a6afafba06a5009da5db2b3c60
Compiling jet_test using the /std:c++17 switch triggers a C3198 compile
error in <numeric>. Moving #pragma below all the includes, allows to
workaround the issue.
Additionally, locally ensure the floating-point model is always
/fp:precise to be able to access the floating-point environment in
jet_test.
Change-Id: Ia5b3a3dac13baf46546ac1d0d304fc05512f8816
If SuiteSparse is found, an unhelpful message "Found SuiteSparse: TRUE
..." is printed. Instead, report the found include directory and version
information which was previously not shown due to unset
SuiteSparse_FOUND variable.
Change-Id: Ib43fb99934f34e6007110007d2cd4a8fbd841aa2
pair_hash.h uses std::size_t and std::hash but does not include the
corresponding headers <cstddef> and <functional>.
Change-Id: I194a5c76e8f50b1574e1359f616351581033c576
* Use generator expression instead of CMAKE_RUNTIME_OUTPUT_DIRECTORY
to get the path of compiled CUDA test targets when running
cuda-memcheck tests.
* Only add cuda-memcheck targets if testing is enabled.
Change-Id: Idea498dd9008b7e5075d4af9775f9f43716e22f1
covariance.h was using SUITE_SPARSE even when SUITESPARSE
was disabled because it did not have config.h included in it
so it did not see that CERES_NO_SUITESPARSE was defined.
Add more config.h includes to files that are using these
configuration macros.
Change-Id: I6b1d2c2bd9e559de40a6332cd6be85ad4da3377b
A recent change introduced some uses of `IN_LIST` in
FindSuiteSparse.cmake, but this is only introduced in cmake 3.3 and
breaks downstream projects that set cmake_minimum_required() to anything
lower.
This commit locally sets CMP0057, which enables the `IN_LIST` operator
and fixes the build for these projects.
Primarily motivated by colmap, which sets cmake_minimum_required(3.0)
and is currently broken: https://github.com/colmap/colmap/issues/1451
Change-Id: I9580c86f56248611326a932b8650b9048fb0ff14
In the case, necessary properties of import targets cannot be set (i.e.,
either because the include directory or the library was found), do not
define import target to begin with.
Change-Id: Id216cd692a8ec240a20f65b174f196ddaa306c2b
Overriding export gflags export macros breaks glog in shared Ceres
solver builds. Threfore, always compile gtest as a static library to
avoid the need of overriding the export macros.
Change-Id: Ibc9a04a771085caa8f02c81745ce626643df8450
These changes allow the use of a SuiteSparse CMake package from
https://github.com/sergiud/SuiteSparse that allows native compilation of
SuiteSparse using CMake on a variety of platforms Packages generated
using official SuiteSparse makefiles can still be used without
modifications. The find module remains agnostic to specific CMake
package implementation.
CMake packages have the advantage that they are self-contained and
relocatable. The latter is particularly useful in cross-compilation
scenarios.
Fixes#728
Change-Id: I089d5c6f87c05b1530a5ab9a36dff2fcbe82d13d