Unify cost function differentiation benchmarks

Replace internal/ceres/autodiff_benchmarks/ with
internal/ceres/benchmark_cost_functions.h and
internal/ceres/cost_function_differentiation_benchmark.cc:
- Consolidate the benchmark cost functors into
  internal/ceres/benchmark_cost_functions.h as self-contained structs
  inheriting from BenchmarkCostFunctor<kNumResiduals, Ns...> with
  default constructors and MakeParameters(), and remove the
  internal/ceres/autodiff_benchmarks/ subdirectory.
- Add nine real-world camera projection, epipolar, and SLAM cost
  functors (OpenCV, FullOpenCV, Rig, Sampson, Fisheye, and Spherical
  from COLMAP; Brown-Conrady and Nuke InvertIntrinsics from Blender
  libmv; and PoseGraph3dError from Ceres).
- Benchmark AutoDiffCostFunction (static and dynamic residuals),
  DynamicAutoDiffCostFunction, NumericDiffCostFunction, and
  DynamicNumericDiffCostFunction (FORWARD, CENTRAL, RIDDERS) using a
  single BM_CostFunction<CostFunctor, kDiffType, kEvalType> template and
  CostFunctionFactory in cost_function_differentiation_benchmark.cc.
- Add CostFunctionToFunctor and DynamicCostFunctionToFunctor benchmarks.
- Fix ConstantCostFunction to pass kParameterBlockSize instead of 1 and
  remove redundant AnalyticConstantCostFunction.
- Move -mllvm -inlinehint-threshold=1000000 into
  add_dependencies_to_benchmark in internal/ceres/CMakeLists.txt.

Change-Id: Ic02f4d29a15b5faa606a5af033c19d0bfd1bba91
12 files changed
tree: f454242fe1d3a9b7b5f2cacdc88b163200ce4dae
  1. .github/
  2. bazel/
  3. cmake/
  4. config/
  5. data/
  6. docs/
  7. examples/
  8. include/
  9. internal/
  10. LICENSES/
  11. scripts/
  12. third_party/
  13. .bazelignore
  14. .clang-format
  15. .gitignore
  16. .gitmodules
  17. .readthedocs.yaml
  18. BUILD
  19. CITATION.cff
  20. CMakeLists.txt
  21. CONTRIBUTING.md
  22. LICENSE
  23. MODULE.bazel
  24. package.xml
  25. README.md
  26. REUSE.toml
  27. WORKSPACE
README.md

Android Linux macOS Windows

Ceres Solver

Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems. It is a feature rich, mature and performant library which has been used in production at Google since 2010. Ceres Solver can solve two kinds of problems.

  1. Non-linear Least Squares problems with bounds constraints.
  2. General unconstrained optimization problems.

Please see ceres-solver.org for more information.