From bb299668105bed86d3b345a19b63f9d0f89d4f95 Mon Sep 17 00:00:00 2001 From: Sameer Agarwal Date: Mon, 14 Feb 2022 13:37:56 -0800 Subject: [PATCH] Check CUDA is available in solver.cc Add logic for checking for availability of CUDA as the dense linear algebra library before allowing the user to use it. Change-Id: I0ceafa1052632504b33685bc731366ef6933e518 --- internal/ceres/solver.cc | 14 +++++++++----- internal/ceres/types.cc | 9 +++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc index 7560883e9..150c5550f 100644 --- a/internal/ceres/solver.cc +++ b/internal/ceres/solver.cc @@ -141,16 +141,20 @@ bool TrustRegionOptionsAreValid(const Solver::Options& options, string* error) { return false; } - if (options.dense_linear_algebra_library_type == LAPACK && - !IsDenseLinearAlgebraLibraryTypeAvailable(LAPACK) && + if (!IsDenseLinearAlgebraLibraryTypeAvailable( + options.dense_linear_algebra_library_type) && (options.linear_solver_type == DENSE_NORMAL_CHOLESKY || options.linear_solver_type == DENSE_QR || options.linear_solver_type == DENSE_SCHUR)) { *error = StringPrintf( "Can't use %s with " - "Solver::Options::dense_linear_algebra_library_type = LAPACK " - "because LAPACK was not enabled when Ceres was built.", - LinearSolverTypeToString(options.linear_solver_type)); + "Solver::Options::dense_linear_algebra_library_type = %s " + "because %s was not enabled when Ceres was built.", + LinearSolverTypeToString(options.linear_solver_type), + DenseLinearAlgebraLibraryTypeToString( + options.dense_linear_algebra_library_type), + DenseLinearAlgebraLibraryTypeToString( + options.dense_linear_algebra_library_type)); return false; } diff --git a/internal/ceres/types.cc b/internal/ceres/types.cc index ebd454fd2..8cfbc772a 100644 --- a/internal/ceres/types.cc +++ b/internal/ceres/types.cc @@ -420,6 +420,7 @@ bool IsDenseLinearAlgebraLibraryTypeAvailable( if (type == EIGEN) { return true; } + if (type == LAPACK) { #ifdef CERES_NO_LAPACK return false; @@ -428,6 +429,14 @@ bool IsDenseLinearAlgebraLibraryTypeAvailable( #endif } + if (type == CUDA) { +#ifdef CERES_NO_CUDA + return false; +#else + return false; +#endif + } + LOG(WARNING) << "Unknown dense linear algebra library " << type; return false; }