commit | 829089053e261f056dd72cd8c74e4c19ac445924 | [log] [tgz] |
---|---|---|
author | Joydeep Biswas <joydeepb@cs.utexas.edu> | Sun Aug 14 19:14:04 2022 -0500 |
committer | Joydeep Biswas <joydeepb@cs.utexas.edu> | Mon Aug 15 23:44:34 2022 -0500 |
tree | caba246cd62e6635b98233af2b8e14c76569d707 | |
parent | 6ab435d77442f81a6dfdbda79ccde275900d02c6 [diff] |
CUDA CGNR, Part 4: CudaCgnrSolver * Added CudaCgnrSolver, a new CUDA-accelerated CGNR. * To use CudaCgnrSolver, the user must select CGNR as the linear_solver and CUDA_SPARSE as the sparse_linear_algebra_library. * Updated ConjugateGradientSolver to work with an array of pointers to scratch to support CudaVectors as scratch. * Moved CUDA initialization to run in Solver::Solve as needed. Some performance comparisons on an Ubuntu 20.04 desktop with an Intel i9-9940X CPU @ 3.30GHz, and an nVidia Quadro RTX 6000, all configurations run with 24 threads, and 10 iterations. ================================================= CGNR + CUDA_SPARSE + IDENTITY Preconditioner problem-1778-993923-pre.txt ================================================= Cost: Initial 2.563973e+08 Final 1.724755e+06 Change 2.546725e+08 Minimizer iterations 11 Successful steps 7 Unsuccessful steps 4 Time (in seconds): Preprocessor 4.020158 Residual only evaluation 1.567092 (10) Jacobian & residual evaluation 7.847130 (7) Linear solver 31.688898 (10) Minimizer 46.834987 Postprocessor 0.353974 Total 51.209120 ================================================= SPARSE_SCHUR (CPU) + SUITE_SPARSE + AMD problem-1778-993923-pre.txt ================================================= Cost: Initial 2.563973e+08 Final 1.651617e+06 Change 2.547457e+08 Minimizer iterations 11 Successful steps 11 Unsuccessful steps 0 Time (in seconds): Preprocessor 35.812003 Residual only evaluation 1.658980 (10) Jacobian & residual evaluation 12.218799 (11) Linear solver 76.409992 (10) Minimizer 98.809773 Postprocessor 0.372712 Total 134.994489 ================================================= ITERATIVE_SCHUR (CPU) + JACOBI Preconditioner problem-1778-993923-pre.txt ================================================= Cost: Initial 2.563973e+08 Final 1.684447e+06 Change 2.547128e+08 Minimizer iterations 11 Successful steps 8 Unsuccessful steps 3 Time (in seconds): Preprocessor 15.331614 Residual only evaluation 1.606114 (10) Jacobian & residual evaluation 8.502166 (8) Linear solver 351.910080 (10) Minimizer 368.797327 Postprocessor 0.363536 Total 384.492478 ================================================= CGNR + CUDA_SPARSE + IDENTITY Preconditioner problem-13682-4456117-pre.txt ================================================= Cost: Initial 1.126372e+09 Final 2.269329e+07 Change 1.103678e+09 Minimizer iterations 11 Successful steps 7 Unsuccessful steps 4 Time (in seconds): Preprocessor 19.140087 Residual only evaluation 8.721920 (10) Jacobian & residual evaluation 41.955923 (7) Linear solver 214.121861 (10) Minimizer 296.636890 Postprocessor 1.971827 Total 317.748804 Change-Id: I3a09f31aa6903f661e91f595afd39d427583e856
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.
Please see ceres-solver.org for more information.