Commit Graph

1862 Commits

Author SHA1 Message Date
Sergiu Deitsch d87fd551bc Fix Ubuntu 20.04 workflow tests
Previously, the tests did not run because the CMake version shipped with
Ubuntu 20.04 does not understand the `--test-dir` option and silently
fails.

Change-Id: I335e1d9e3890aa56e66a9dfd0fccd4594a84a08c
2022-05-27 10:47:07 +00:00
Sergiu Deitsch 71717f37c6 Use glog 0.6 release to run Windows Github workflow
Change-Id: I2853ea13c798c6ef05b3a19a2d3986b514caf1ed
2022-05-27 11:43:41 +02:00
Sameer Agarwal 66e0adfa70 Fix detection of sphinx-rtd-theme
Upstreaming fix from Debian.

https: //github.com/ceres-solver/ceres-solver/issues/809
Change-Id: I0e2f90a405a56ceffdda37f70d6e1ac853e176f1
2022-05-23 23:02:40 -07:00
Sameer Agarwal d09f7e9d5e Enable postordering when computing the sparse factorization.
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
2022-05-21 14:23:36 -07:00
Sameer Agarwal 9b34ecef1c Unbreak the build on MacOS
Change-Id: I9144a84842baf1921b8d5808983d8d4e7cde747a
2022-05-19 14:21:15 -07:00
Sameer Agarwal 8ba8fbb173 Remove Solver::Options::use_postordering
This was an ill-advised and complicated to interpret option
which offers nothing particularly useful.

Change-Id: Ia7741ed62ef977c96fa52299a884e404bee659ac
2022-05-19 21:10:33 +00:00
Sameer Agarwal 30b4d5df35 Fix the ceres.bzl to add missing cc files.
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
2022-05-19 14:07:15 -07:00
Sameer Agarwal 39ec5e8f99 Add Nested Dissection based fill reducing ordering
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
2022-05-19 12:36:20 -07:00
Sameer Agarwal aa62dd86a8 Fix a build breakage
Change-Id: I57591bc42d53f9856b49f7a16732a2a1e259dc67
2022-05-19 11:20:38 -07:00
Sameer Agarwal 41c5fb1e80 Refactor suitesparse.h/cc
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
2022-05-19 11:05:46 -07:00
Sameer Agarwal 12263e2830 Make the min. required version of SuiteSparse to be 4.5.6
With this change we can drop the complicated/conditional handling
around CAMD and assume that it is always available.

Change-Id: I93e1da676fb75817f79824b8b2b6549d03f278b0
2022-05-16 12:48:43 -07:00
Sameer Agarwal c8493fc366 Convert internal enums to be class enums.
Change-Id: Ide89c7115c3b12c0f2452a2969dc5523b3a7970f
2022-05-16 12:47:15 -07:00
Sameer Agarwal bb3a40c091 Add Nested Dissection ordering method to SuiteSparse
Change-Id: I5e00977839d9d5ce914bda0978d81e97e28fc673
2022-05-14 15:08:10 -07:00
Evan Levine f1414cb5bd Correct spelling in comments and docs.
Change-Id: Iad9a0599d644d3b3cd54244edaf64d408cb1308e
2022-04-24 21:40:13 -07:00
Evan Levine fd2b0ceed2 Correct spelling (contiguous, BANS)
Change-Id: I9d3363c3d6e251fbdcf41d6d9635543c7295c3a2
2022-04-24 14:27:22 -07:00
Sergiu Deitsch 464abc1983 Run Linux Github workflow on Ubuntu 22.04
Change-Id: I8a404c23d9f38bf9bd538edef933258814a91a67
2022-04-23 13:28:39 +02:00
Sameer Agarwal caf614a6c1 Modernize code using c++17 constructs
Mostly done using

find . \( -name '*.cc' -o -name '*.h' \) -a -type f -exec clang-tidy -p \
cmake-build -checks='-*,google-*,modernize-*,-modernize-use-nodiscard,-modernize-use-trailing-return-type' {} -fix \;

Change-Id: Ifccbcabe7a1d9a32a09d28ac4f3f8466696c1a50
2022-04-22 06:11:18 -07:00
Sameer Agarwal be618133e7 Simplify some template metaprograms using fold expressions.
Change-Id: I865b670b99df30db39d33cbfe45170b70472e532
2022-04-15 06:03:09 -07:00
Sameer Agarwal 3b0096c1bb Add the ability to specify the pivot threshold in Covariance::Options
https: //github.com/ceres-solver/ceres-solver/issues/777
Change-Id: I481612b7bc727d5cd0dc21a0e0dbaf356722ba22
2022-04-12 18:55:35 -07:00
Sergiu Deitsch 40c1a7e18e Fix Github workflows
* 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
2022-04-01 21:19:54 +02:00
Sameer Agarwal 1274743609 Ceres Solver now requires C++17
Fixes https://github.com/ceres-solver/ceres-solver/issues/779

Change-Id: I6671b8da9d2004f9c76be8b03f6753c9fc5a0061
2022-03-31 11:14:17 -07:00
Sameer Agarwal b5f1b78777 clang-format cleanup
Change-Id: Icebce956d35135e46df657c6038a47fa9ed165df
2022-03-31 08:57:31 -07:00
Sameer Agarwal 32cd1115c0 Make the code in small_blas_generic.h more compiler friendly.
Instead of having four separate scalars, allocate them as
an array as they are all touched as a group of four.

Change-Id: I773cfc08cf53b66032985c11a4b0ebc06db06083
2022-03-31 08:36:04 -07:00
Sameer Agarwal f68321e7de Update version history
Change-Id: I8a1ad5051f7654dfdead0a225fa9263c02643914
2.1.0
2022-03-28 07:02:35 -07:00
Sergiu Deitsch b34280207b Fix MSVC small_blas_test failures
The tests fail only in C++17 mode (and above) with optimizations enabled.

Fixes #782

Change-Id: Ia3b7221efdd9091d252a7323613b7e54794470ee
2022-03-27 17:31:02 +00:00
Sameer Agarwal b246991b6f Update the citation instructions in the docs
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
2022-03-27 10:19:41 -07:00
Sergiu Deitsch c0c14abca2 Fix version history item numbering
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
2022-03-26 23:33:26 +01:00
Sergiu Deitsch d23dbac25b Update Windows install guide
Change-Id: I445354bee0f54b33921ea9411b7bb320af275d43
2022-03-25 19:19:45 +01:00
Sergiu Deitsch e669c9fc7a Provide citation file
This makes citations accessible directly on Github and allows users to
automatically generate citations in APA and BibTeX format.

Change-Id: Ic5eb3857c92d93a6afafba06a5009da5db2b3c60
2022-03-25 00:01:01 +01:00
Sameer Agarwal ff57c2e91e Update version history for 2.1.0rc2
Change-Id: If107c2cc356ff402d743d8393c2a1f49a0720c28
2.1.0rc2
2022-03-21 09:34:42 -07:00
Sergiu Deitsch ab9436cb9e Workaround MSVC STL deficiency in C++17 mode
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
2022-03-20 14:35:02 +00:00
Sameer Agarwal 97c232857d Update the included gtest to version 1.11.0
Change-Id: Icd79eaebce95d2836587aaa5273674bcf2899bc5
2022-03-20 14:34:12 +00:00
Sergiu Deitsch 4eac7ddd27 Fix Jet lerp test regression
Partially revert changes from 1d5aff059c
to those in 8426526dff.

Fixes #775

Change-Id: I6b2f481521f15bf09c039283e79f9ee13664f987
2022-03-20 01:57:57 +01:00
Sergiu Deitsch 2ffbe126df Fix Jet test failures on ARMv8 with recent Xcode
Fixes #774

Change-Id: I741924bc82f62f122c47df2b38e02a50e0fdb0da
2022-03-19 22:47:41 +01:00
Dmitriy Korchemkin 0d6a0292c9 Fix unused arguments of Make1stOrderPerturbation
Change-Id: Ibc7ef45e88abdde67dbb2705a3423ad4c4594859
2022-03-18 21:02:05 +03:00
Sergiu Deitsch 93511bfdc9 Fix SuiteSparse path and version reporting
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
2022-03-14 20:27:24 +01:00
Sergiu Deitsch bf329b30f6 Fix link to macOS badge
Change-Id: I95748c2abbd677160c69b424f8fbc3b15e17a641
2022-03-14 18:56:05 +01:00
Sergiu Deitsch 0133dada2d Add Github workflows
Change-Id: I74fc45784b1b1d20c22b9e983902aa69fbfa764f
2022-03-13 23:51:40 +01:00
Sergiu Deitsch 3d3d6ed71b Add missing includes
pair_hash.h uses std::size_t and std::hash but does not include the
corresponding headers <cstddef> and <functional>.

Change-Id: I194a5c76e8f50b1574e1359f616351581033c576
2022-03-13 22:21:18 +01:00
Joydeep Biswas 0a9c0df8aa Fix path for cuda-memcheck tests
* 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
2022-03-13 10:47:45 -05:00
Sameer Agarwal ee35ef66f6 ClangFormat cleanup via scripts/all_format.sh
Change-Id: Ideafec543a9d090a767bae58123b7512c9e9ae4a
2022-03-12 16:25:45 -08:00
Sameer Agarwal 4705159858 Add missing includes for config.h
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
2022-03-12 15:55:19 -08:00
Brent Yi d3612c12c0 Set CMP0057 policy for IN_LIST operator in FindSuiteSparse.cmake
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
2022-03-09 02:35:00 -08:00
Sergiu Deitsch 4bc100c13d Do not define unusable import targets
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
2022-03-09 09:52:44 +00:00
Sergiu Deitsch e91995cce4 Fix Ubuntu 18.04 shared library build
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
2022-03-08 19:37:57 +00:00
Sergiu Deitsch 94af09186f Force C++ linker
Forcing linker language to C causes linker errors when compiling using NDK.

Change-Id: Iea587d1ab00d10b2c331ccc3e178e16c6a78ce5f
2022-03-06 15:54:54 +01:00
Sameer Agarwal a65e738851 Update installation docs
Change-Id: I14cc0d6f0ad4bfeee3d60a42d9b57bc5deaad01b
2.1.0rc1
2022-03-04 11:10:38 -08:00
Sergiu Deitsch 1a377d7078 Fix Ubuntu 20.04 SPQR build
Fixes #764

Change-Id: I045eb6653749d8a09f4aeb617163288cbf92ad56
2022-03-04 16:27:41 +01:00
Sergiu Deitsch 817f5a0688 Switch to imported SuiteSparse, CXSparse, and METIS targets
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
2022-03-03 21:26:45 +01:00
Sergiu Deitsch b0f32a20d7 Hide remaining internal symbols
Change-Id: Ibd2f8c5e7a730503479cb4f17db2de8727f94d2c
2022-03-03 18:45:01 +01:00