Skip to content

Commit 91a19f8

Browse files
authored
Fix issue with barrier incorrectly returning numerical in concurrent (NVIDIA#484)
@tmckayus reported that in concurrent mode, he was seeing lots of barrier numerical status. This was due to incorrectly setting the status to NUMERIC, when barrier was stopped by PDLP or concurrent. This PR fixes the issue, by checking for concurrent limit first. Logs are also changed for consistency. Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Hugo Linsenmaier (https://github.com/hlinsen) URL: NVIDIA#484
1 parent 36b96cd commit 91a19f8

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

cpp/src/dual_simplex/barrier.cu

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3266,14 +3266,15 @@ lp_status_t barrier_solver_t<i_t, f_t>::solve(f_t start_time,
32663266
}
32673267

32683268
iteration_data_t<i_t, f_t> data(lp, num_upper_bounds, settings);
3269-
if (data.symbolic_status != 0) {
3270-
settings.log.printf("Error in symbolic analysis\n");
3271-
return lp_status_t::NUMERICAL_ISSUES;
3272-
}
32733269
if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) {
32743270
settings.log.printf("Barrier solver halted\n");
32753271
return lp_status_t::CONCURRENT_LIMIT;
32763272
}
3273+
if (data.symbolic_status != 0) {
3274+
settings.log.printf("Error in symbolic analysis\n");
3275+
return lp_status_t::NUMERICAL_ISSUES;
3276+
}
3277+
32773278
data.cusparse_dual_residual_ = data.cusparse_view_.create_vector(data.d_dual_residual_);
32783279
data.cusparse_r1_ = data.cusparse_view_.create_vector(data.d_r1_);
32793280
data.cusparse_tmp4_ = data.cusparse_view_.create_vector(data.d_tmp4_);

cpp/src/mip/diversity/diversity_manager.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ bool diversity_manager_t<i_t, f_t>::run_presolve(f_t time_limit)
245245
lp_dual_optimal_solution.resize(problem_ptr->n_constraints,
246246
problem_ptr->handle_ptr->get_stream());
247247
problem_ptr->handle_ptr->sync_stream();
248-
CUOPT_LOG_INFO("After trivial presolve #constraints %d #variables %d objective offset %f.",
248+
CUOPT_LOG_INFO("After trivial presolve: %d constraints, %d variables, objective offset %f.",
249249
problem_ptr->n_constraints,
250250
problem_ptr->n_variables,
251251
problem_ptr->presolve_data.objective_offset);

0 commit comments

Comments
 (0)