Commit Graph

2189 Commits

Author SHA1 Message Date
Sameer Agarwal 39b7cbaa5d Use absl hash containers for graph algorithms
This reduces pre-processor time when finding an
ordering automatically substantially.

Before:

ComputeStableSchurOrdering
                                        Delta   Cumulative
              CreateHessianGraph :    0.50324      0.50324
                     Preordering :    0.00692      0.51017
            StableIndependentSet :    0.26341      0.77358
         ConstantParameterBlocks :    0.00095      0.77453
                           Total :    0.23978      1.01431

After:

ComputeStableSchurOrdering
                                        Delta   Cumulative
              CreateHessianGraph :    0.17183      0.17183
                     Preordering :    0.00226      0.17409
            StableIndependentSet :    0.12510      0.29919
         ConstantParameterBlocks :    0.00073      0.29991
                           Total :    0.01638      0.31629

Change-Id: I50bbac69f8b3f19240a61a218913cebf34da0db5
2024-09-16 21:51:54 +00:00
Sergiu Deitsch 00b33b6523 Fix MSVC build
Using preprocessor directives in a macro expansion is a (non-standard)
language extension that is not supported by MSVC.

Change-Id: I6e158b108a9c13cd277afb96cab2017ac192e3a2
2024-09-16 23:16:07 +02:00
Sameer Agarwal 0a7845fef4 Unbreak the build due to a silly typo
Change-Id: Ib05cb3ceeb974b1099bc7b090f77e109ddcd7166
2024-09-15 21:24:47 -07:00
Sameer Agarwal 88f2cb32cd ClangTidy fixes
Change-Id: I1f4d6975fd1b9629d1db0d529d9ee92d79c11e84
2024-09-15 20:12:27 -07:00
Sameer Agarwal c59882eca0 ClangTidy fixes
Change-Id: I421b29e218c045c5d8bef42c840fa366d7c011fc
2024-09-15 22:29:56 +00:00
Sameer Agarwal 793efde013 Fix Abseil version checking
Previously the find_package call was followed by a manual version
check because we were using a Major.Minor version. Just checking
for Major version works.

Change-Id: If83f8d1c6001d0ac3d53d9b24946b9168eb4932b
2024-09-15 15:13:13 -07:00
Sameer Agarwal 07651df0ad Partially update the installation docs
1. Update dependencies
2. Mention submodules

Change-Id: I2f238c92a3a1eeee3277e3ec6f973fc2d50fe008
2024-09-15 15:00:25 -07:00
Sameer Agarwal 8f1b6123ad GradientProblem & related classes use std::unique_ptr
Previously these classes in analogy with ceres::Problem's interface
had interfaces to allow bare pointers as well as unique_ptrs. This
CL changes the API to always use unique_ptr, this is less error prone
and makes the default ownership semantics clearer.

Change-Id: I7577a90761f341c7e009c248c820f0fec2e6f32d
2024-09-15 21:57:23 +00:00
Reinhold Gschweicher 487ce37fa7 Allow system/local Abseil master
Add special handling when `absl_VERSION` is empty. This is
the case when the `master` branch of `abseil-cpp` was installed using
`CMake`. In that case check for VLOG availability through the CMake
target `absl::absl_vlog_is_on`.

Fixes: https://github.com/ceres-solver/ceres-solver/issues/1098
Change-Id: I3367aeb65caceb11558d8d6265dafe3ecc9a4875
2024-09-11 08:06:36 +02:00
Sameer Agarwal 6aa7df9650 Reduce the minimum required version of Abseil
1. The required version of Abseil is now 20240116.0 instead of 20240116.2.
   This was an oversight. Thanks to @NeroBurner for pointing this out.
   Both CMake and Bazel builds are updated.

2. Unbreak the Bazel build which had become stale.

Change-Id: I274bbad2f94f7710387f9693de9c66b035758970
2024-09-09 08:48:58 -07:00
Ian Muldoon ea4400cd57 Update reference from Project Tango to ARCore
Change-Id: Idcba8afc980561bfc9444c375f573e388a53e85f
2024-09-05 10:23:05 -07:00
Sameer Agarwal ecae3de151 Fix a declaration order problem in sparse_cholesky_test.cc
Change-Id: Ie74069e8716145c244955bf907e2bae79f48972f
2024-08-26 16:57:17 +00:00
Sameer Agarwal 8964e52b01 ClangTidy fixes
Change-Id: Id7358fcdccae69b46b479d55ed6aee80efd3431e
2024-08-26 09:18:17 -07:00
Sameer Agarwal 80fce72bfd Add mixed precision solves for SUITE_SPARSE
Starting with SuiteSparse version 7.4.0 CHOLMOD has support for single
precision matrices. This allows us to have single precision and mixed
precision solves when using the SUITE_SPARSE backend.

This CL also fixes sparse_cholesky_test which was completely broken for
single precision testing.

Sample performance on my Mac.
/usr/bin/time -l ./bin/bundle_adjuster --input=../../Downloads/problem-3068-310854-pre.txt
<SNIP>

Cost:
Initial                          9.099334e+07
Final                            4.161838e+06
Change                           8.683150e+07

Minimizer iterations                        6
Successful steps                            4
Unsuccessful steps                          2

Time (in seconds):
Preprocessor                         2.528222

  Residual only evaluation           0.142804 (5)
  Jacobian & residual evaluation     0.424014 (4)
  Linear solver                     54.083396 (5)
Minimizer                           54.895752

Postprocessor                        0.024564
Total                               57.448539

Termination:                   NO_CONVERGENCE (Maximum number of iterations reached. Number of iterations: 5.)

       59.04 real       341.24 user         5.49 sys
          5776375808  maximum resident set size
<SNIP>
        616329634071  instructions retired
        929475980510  cycles elapsed
          5375034560  peak memory footprint

/usr/bin/time -l ./bin/bundle_adjuster --input=../../Downloads/problem-3068-310854-pre.txt  -mixed_precision_solves
<SNIP>

Cost:
Initial                          9.099334e+07
Final                            4.148930e+06
Change                           8.684441e+07

Minimizer iterations                        6
Successful steps                            4
Unsuccessful steps                          2

Time (in seconds):
Preprocessor                         2.580217

  Residual only evaluation           0.144098 (5)
  Jacobian & residual evaluation     0.396723 (4)
  Linear solver                     23.636074 (5)
Minimizer                           24.427163

Postprocessor                        0.023790
Total                               27.031170

Termination:                   NO_CONVERGENCE (Maximum number of iterations reached. Number of iterations: 5.)

       28.58 real       128.53 user         2.37 sys
          4818386944  maximum resident set size
<SNIP>
        395186936091  instructions retired
        368802808856  cycles elapsed
          4327029824  peak memory footprint

Change-Id: I1f137b0dd12da8da7f9ced338dd8f20f4bbdf99d
2024-08-24 21:12:54 -07:00
Sameer Agarwal 8f85014dcf Change the version from 2.2.0 to 2.3.0
The dependencies and the API have changed enough that
it is worth incrementing the version number.

Change-Id: I4e2911a91988d97f47320c56072ad1546e20030b
2024-08-24 09:29:51 -07:00
Sameer Agarwal 9186dcc49c Add the ability to use system installed versions of abseil and googletest
If the user has checked out the submodules in third_party, they will be
used, otherwise we will try and find the system installed versions of
these dependencies and use them if they are modern enough.

Change-Id: I52164bc48a6ea804b85cdda05fee9cb94632f6c0
2024-08-14 21:16:57 -07:00
Sameer Agarwal 6726cd5073 Fix absl::log_flags linking on Linux
Generator expressions were introduced in CMake version 3.24. Without
them including absl::log_flags as an internal dependency causes
linking problems on some platforms. So for platforms with an older
CMake version we make absl::log_flags a public dependency.

Change-Id: I686f41e76b0ac17a03f1cd1d614372a7f130dfd9
2024-08-12 07:06:34 -07:00
Sameer Agarwal 4aa57d8096 Replace string_view with string.
The use of string_view causes problems with absl::StrCat
in certain compilation configurations.

Change-Id: I1beda82692378bf9cf378a7d42df46de8491d1c9
2024-08-09 17:02:53 -07:00
Sameer Agarwal f45b98709d More ClangTidy Fixes
Change-Id: I286a9b6402812707e64f71952eeb79b755ec43d9
2024-08-09 16:35:09 -07:00
Sameer Agarwal a3afe3d724 ClangTidy fixes
Change-Id: I2ed57cd6f84bae81686a833834bf00ddef91f61b
2024-08-09 16:24:07 -07:00
Sameer Agarwal 0bd9e63dcc Add absl/log/vlog_is_on.h when using VLOG_IS_ON
Previously this header was included in absl/log/log.h
but going forward this header will not be included.

Change-Id: Ie663b221d90e32a852fb00dfe20f731dcd1dcf6b
2024-08-09 16:15:22 -07:00
Sameer Agarwal b97ffeadbb Use absl::time
Replace WallTimeInSeconds with absl::Now and use
absl::Time and absl::Duration objects instead of doubles.

wall_time.h/cc -> event_logger.h/cc

Change-Id: I41279961368840fbdf6bb3456ffdbdf2f9bfb85b
2024-08-08 07:18:44 -07:00
Sameer Agarwal 03caeed1c6 ceres/stringprintf -> absl::strings
Replace ceres::String* with their more modern and performant
absl strings library equivalent and delete our string
manipulation library.

Change-Id: Iecbdba9864e0abf329778f81fdc0708f78f7594f
2024-08-08 07:05:23 -07:00
Sameer Agarwal 0ecdb82616 Link to absl::log_flags
This enables control of logging using commandline flags.

Fixes https://github.com/ceres-solver/ceres-solver/issues/1090

Change-Id: Ia0fd6abf4a8e6dfa8bc4e71d2263d622a28b0268
2024-08-08 06:59:39 -07:00
Sameer Agarwal 9503130830 Delete an unused file memory.h
Change-Id: I7824315b42ff72645f59256e64cf6e82f16af82f
2024-07-23 13:52:46 -07:00
Sameer Agarwal ebb66e655f ceres::internal::FixedArray -> absl::FixedArray
Ceres Solver was using an old forked version of FixedArray,
now that we are using absl, we can use the official version
that ships with it.

Change-Id: Ic88d7f6e8a49b928d611f7cbb04172452b322b01
2024-07-23 13:45:45 -07:00
Sameer Agarwal c181b6dbc4 ClangTidy fixes part 3
Change-Id: I69587f663b8d91a465ed068a82f9e09e3b7a72e2
2024-07-22 07:25:14 -07:00
Sameer Agarwal 3c4f012606 ClangTidy fixes #2
Change-Id: Ib3baa62248342276d63b900b45561323fd81402d
2024-07-21 20:31:32 -07:00
Sameer Agarwal 0ca2db57c7 Fix a number of typos
Change-Id: I0038f9c91dc70c422c01305dc10fca5a22a2f0d0
2024-07-21 15:15:36 -07:00
Sameer Agarwal 6b9a690009 ClangTidy cleanup part 1
Change-Id: Id592fc68b8f184cd002df9d94a68d05fbbf9c24d
2024-07-21 14:55:46 -07:00
Sameer Agarwal 68eeba2c2c Add a missing include
Change-Id: I3060e80a69374f7a2db31121715d0d892a54d311
2024-07-21 13:25:45 -07:00
Sameer Agarwal 1e19a11f5f Add a missing include
Change-Id: I0a3fa842183bc7cb9ba00b17d6181cebc3eac50d
2024-07-21 08:24:31 -07:00
Sameer Agarwal de4ea5b4c7 Add a missing override
Change-Id: I6f610d187551fb3dca57912681e0e37eea26723f
2024-07-21 08:20:19 -07:00
Sameer Agarwal 7566ebae08 Various cleanups
Change-Id: Ie453e199a128a102bf3d5524a466f549aac0c7ce
2024-07-21 08:14:08 -07:00
Sergiu Deitsch dc480fc634 Fix shared library builds
Fixes #1083

Change-Id: I3926513d07730ca8e0c24121e5b49f3f44f67dbd
2024-07-20 22:05:56 +02:00
Sameer Agarwal ba6b678b23 Remove glog and gflags from the CI workflows
Change-Id: I94199ddcbd105b33a8401366dd0d952cc79ec755
2024-07-18 15:40:28 -07:00
Sameer Agarwal 968079f9fa Remove ASSERT macros from non-void functions
Change-Id: I891e00671e7a3ddaecf006cacb93b48379b8d9c8
2024-07-18 14:04:24 -07:00
Sameer Agarwal 6016a69bd5 Remove a header added by mistake
Change-Id: I5138804540978d6dfd2206d10a32b9d20a756d3d
2024-07-18 11:45:16 -07:00
Sameer Agarwal 57e26182f3 Add more missing headers
Change-Id: I35875ca856b7b80c622562a1c14b4c8ced10f740
2024-07-18 11:37:07 -07:00
Sameer Agarwal ea4d8c63ef Fix an incorrect include
Change-Id: I5b19dc5d4203a0603f21f1db06f4edb7fe2b76c2
2024-07-18 11:08:39 -07:00
Sameer Agarwal 14e8118a36 Add a missing header to context_impl.cc
Change-Id: I7b6c564ac67926e91543a96bfd6362471de775c8
2024-07-18 10:22:18 -07:00
Sameer Agarwal 0a53aa9054 Take abseil as a dependency
1. Add abseil-cpp as a submodule. We are tracking the latest LTS
release, which is lts_2024_01_16.
2. Replace glog/gflags with absl::log and absl::flags.
3. Remove miniglog
4. Also take a whack at making the bazel build work with
   abseil-cpp and gtest.

There are a number of TODOs in this CL that still need to be resolved.

Change-Id: I39355ed7d61375be4ebcbc8596d9cc70acc1c678
2024-07-18 00:24:49 -07:00
Sameer Agarwal 21b026aa2c Use googletest branch v1.14.x
Change-Id: I09d59a2690bd3c46595f8a4938f520add86e3a63
2024-07-09 23:00:07 +00:00
Sergiu Deitsch 8ef35d0245 Fix CTest build config parameter
Change-Id: I4b7aed9c96c07a4e2b2b58618eb5a2452c845ae2
2024-07-10 00:17:45 +02:00
Mark Shachkov 6fb3dae4ee Add cuDSS as sparse Cholesky solver
cuDSS could be used as an alternative for SuiteSparse and EigenSparse
in case if CUDA capable GPU is available.

Change-Id: I7a567093ce91363478118153e181134ed5804573
2024-07-09 20:23:18 +02:00
Sergiu Deitsch e47a42c295 Fix MSVC builds and test runs
Change-Id: I79f839b22985a6510965559af54209d89c8703a0
2024-07-08 23:48:13 +02:00
Mark Shachkov 540b1f2f7a Checkout git submodules during github CI runs.
Change-Id: Ie4e2d618ee70035004ddcaa40a31725a6a610091
2024-07-07 23:22:53 +02:00
Sameer Agarwal 6f2c319e0f Unbreak levenberg_marquardt_strategy_test
Add a missing quotation mark.

Change-Id: I9d7d3c3d6bd5ac616e0dc23f75845178294c45a6
2024-07-07 10:12:52 -07:00
Sameer Agarwal 894fd6903c Update the googletest version
We now use googletest as a git submodule instead
of the old way of converting it into a single header
and including it in the source.

This removes the dependence on googleflags for tests
to be enabled.

Change-Id: If25ea3ba7a39c2b8ba9c6effbed3e7173361b6b1
2024-07-07 09:15:27 -07:00
Sergiu Deitsch 7220e1d1e8 Use CUDA 12.5.1 in Windows Github workflow
Change-Id: I48b077d436ad67afd1e3b8bb7472997355965a12
2024-07-07 14:13:11 +02:00