From 782fb4eff7f9164fa3ff9a8cd93599282cd9cd41 Mon Sep 17 00:00:00 2001 From: Christopher Maes Date: Thu, 13 Aug 2026 18:31:57 -0700 Subject: [PATCH 1/2] Changes for clarabelgpu benchmark --- cpp/src/barrier/barrier.cu | 14 +++++++++----- cpp/src/barrier/sparse_cholesky.cuh | 6 +++--- cpp/src/dual_simplex/presolve.cpp | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/cpp/src/barrier/barrier.cu b/cpp/src/barrier/barrier.cu index 66fa4c2c5f..4571e01163 100644 --- a/cpp/src/barrier/barrier.cu +++ b/cpp/src/barrier/barrier.cu @@ -228,7 +228,8 @@ class iteration_data_t { i_t num_upper_bounds, const std::vector& direct_free_variables, const csc_matrix_t& Qin, - const simplex_solver_settings_t& settings) + const simplex_solver_settings_t& settings, + f_t start_time) : upper_bounds(num_upper_bounds), c(lp.objective), b(lp.rhs), @@ -642,6 +643,7 @@ class iteration_data_t { RAFT_CHECK_CUDA(handle_ptr->get_stream()); } + settings.log.printf("Elapsed time : %.3f seconds\n", toc(start_time)); if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) { return; } { raft::common::nvtx::range scope("Barrier: LP Data: Cholesky init"); @@ -664,6 +666,7 @@ class iteration_data_t { } if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) { return; } symbolic_status = chol->analyze(device_augmented); + settings.log.printf("Elapsed time for augmented : %.3f seconds\n", toc(start_time)); } else { { raft::common::nvtx::range form_scope("Barrier: LP Data: form ADAT"); @@ -671,6 +674,7 @@ class iteration_data_t { } if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) { return; } symbolic_status = chol->analyze(device_ADAT); + settings.log.printf("Elapsed time for ADAT : %.3f seconds\n", toc(start_time)); } } } @@ -4047,7 +4051,7 @@ lp_status_t barrier_solver_t::check_for_suboptimal_solution( template lp_status_t barrier_solver_t::solve(f_t start_time, lp_solution_t& solution) { - settings.log.printf("Barrier solver started at %.2f seconds\n", toc(start_time)); + settings.log.printf("Barrier solver started at %.3f seconds\n", toc(start_time)); try { raft::common::nvtx::range fun_scope("Barrier: solve"); @@ -4084,7 +4088,7 @@ lp_status_t barrier_solver_t::solve(f_t start_time, lp_solution_t 0) { create_Q(lp, Q); } iteration_data_t data( - lp, num_upper_bounds, presolve_info.direct_free_variables, Q, settings); + lp, num_upper_bounds, presolve_info.direct_free_variables, Q, settings, start_time); if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) { settings.log.printf("Barrier solver halted\n"); return lp_status_t::CONCURRENT_LIMIT; @@ -4201,7 +4205,7 @@ lp_status_t barrier_solver_t::solve(f_t start_time, lp_solution_t::solve(f_t start_time, lp_solution_t { return -1; } f_t reordering_time = toc(start_symbolic); - settings_.log.printf("Reordering time : %.2fs\n", reordering_time); + settings_.log.printf("Reordering time : %.3fs\n", reordering_time); start_symbolic_factor = tic(); status = cudssExecute( @@ -511,8 +511,8 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { } RAFT_CUDA_TRY(cudaStreamSynchronize(stream)); f_t symbolic_factorization_time = toc(start_symbolic_factor); - settings_.log.printf("Symbolic factorization time : %.2fs\n", symbolic_factorization_time); - settings_.log.printf("Total symbolic time : %.2fs\n", toc(start_symbolic)); + settings_.log.printf("Symbolic factorization time : %.3fs\n", symbolic_factorization_time); + settings_.log.printf("Total symbolic time : %.3fs\n", toc(start_symbolic)); int64_t lu_nz = 0; size_t size_written = 0; CUDSS_CALL_AND_CHECK( diff --git a/cpp/src/dual_simplex/presolve.cpp b/cpp/src/dual_simplex/presolve.cpp index 292aa692fa..5530cf53d0 100644 --- a/cpp/src/dual_simplex/presolve.cpp +++ b/cpp/src/dual_simplex/presolve.cpp @@ -999,7 +999,7 @@ i_t presolve(const lp_problem_t& original, if (problem.lower[j] == -inf && problem.upper[j] == inf) { free_variables++; } } - if (settings.barrier_presolve && free_variables > 0) { + if (0 && settings.barrier_presolve && free_variables > 0) { // Try to remove free variables std::vector constraints_to_check; std::vector current_free_variables; From f4f8db735b18ae9cae5dcb7c1864519d80e5a5b8 Mon Sep 17 00:00:00 2001 From: Christopher Maes Date: Fri, 14 Aug 2026 15:46:17 -0700 Subject: [PATCH 2/2] Look at the user objective and the presolve objective and don't stop until both are good --- cpp/src/barrier/barrier.cu | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/cpp/src/barrier/barrier.cu b/cpp/src/barrier/barrier.cu index 9eeca8be52..e8c418553c 100644 --- a/cpp/src/barrier/barrier.cu +++ b/cpp/src/barrier/barrier.cu @@ -643,7 +643,6 @@ class iteration_data_t { RAFT_CHECK_CUDA(handle_ptr->get_stream()); } - settings.log.printf("Elapsed time : %.3f seconds\n", toc(start_time)); if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) { return; } { raft::common::nvtx::range scope("Barrier: LP Data: Cholesky init"); @@ -677,6 +676,7 @@ class iteration_data_t { settings.log.printf("Elapsed time for ADAT : %.3f seconds\n", toc(start_time)); } } + settings.log.printf("Elapsed time : %.3f seconds\n", toc(start_time)); } bool has_cones() const { return cones_.has_value(); } @@ -4160,7 +4160,6 @@ lp_status_t barrier_solver_t::solve(f_t start_time, lp_solution_t settings.time_limit) { settings.log.printf("Barrier time limit exceeded\n"); @@ -4242,9 +4241,15 @@ lp_status_t barrier_solver_t::solve(f_t start_time, lp_solution_t::solve(f_t start_time, lp_solution_t::solve(f_t start_time, lp_solution_t