Skip to content

Commit 42e583c

Browse files
authored
Merge branch 'main' into reuse-basis-factorization
2 parents 5b23554 + c6bda57 commit 42e583c

File tree

23 files changed

+177
-105
lines changed

23 files changed

+177
-105
lines changed

benchmarks/linear_programming/cuopt/run_mip.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
#include <cuopt/linear_programming/mip/solver_solution.hpp>
2323
#include <cuopt/linear_programming/optimization_problem.hpp>
2424
#include <cuopt/linear_programming/solve.hpp>
25-
#include <cuopt/logger.hpp>
2625
#include <mps_parser/parser.hpp>
26+
#include <utilities/logger.hpp>
2727

2828
#include <raft/core/handle.hpp>
2929

cpp/cuopt_cli.cpp

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
#include <cuopt/linear_programming/mip/solver_settings.hpp>
1919
#include <cuopt/linear_programming/optimization_problem.hpp>
2020
#include <cuopt/linear_programming/solve.hpp>
21-
#include <cuopt/logger.hpp>
2221
#include <mps_parser/parser.hpp>
22+
#include <utilities/logger.hpp>
2323

2424
#include <raft/core/handle.hpp>
2525

@@ -75,6 +75,18 @@ static char cuda_module_loading_env[] = "CUDA_MODULE_LOADING=EAGER";
7575
*/
7676
inline auto make_async() { return std::make_shared<rmm::mr::cuda_async_memory_resource>(); }
7777

78+
/**
79+
* @brief Handle logger when error happens before logger is initialized
80+
* @param settings Solver settings
81+
* @return cuopt::init_logger_t
82+
*/
83+
inline cuopt::init_logger_t dummy_logger(
84+
const cuopt::linear_programming::solver_settings_t<int, double>& settings)
85+
{
86+
return cuopt::init_logger_t(settings.get_parameter<std::string>(CUOPT_LOG_FILE),
87+
settings.get_parameter<bool>(CUOPT_LOG_TO_CONSOLE));
88+
}
89+
7890
/**
7991
* @brief Run a single file
8092
* @param file_path Path to the MPS format input file containing the optimization problem
@@ -94,6 +106,7 @@ int run_single_file(const std::string& file_path,
94106
settings.set_parameter_from_string(key, val);
95107
}
96108
} catch (const std::exception& e) {
109+
auto log = dummy_logger(settings);
97110
CUOPT_LOG_ERROR("Error: %s", e.what());
98111
return -1;
99112
}
@@ -113,6 +126,7 @@ int run_single_file(const std::string& file_path,
113126
}
114127
}
115128
if (parsing_failed) {
129+
auto log = dummy_logger(settings);
116130
CUOPT_LOG_ERROR("Parsing MPS failed. Exiting!");
117131
return -1;
118132
}
@@ -122,7 +136,8 @@ int run_single_file(const std::string& file_path,
122136

123137
const bool is_mip =
124138
(op_problem.get_problem_category() == cuopt::linear_programming::problem_category_t::MIP ||
125-
op_problem.get_problem_category() == cuopt::linear_programming::problem_category_t::IP);
139+
op_problem.get_problem_category() == cuopt::linear_programming::problem_category_t::IP) &&
140+
!solve_relaxation;
126141

127142
try {
128143
auto initial_solution =
@@ -131,23 +146,36 @@ int run_single_file(const std::string& file_path,
131146
: cuopt::linear_programming::solution_reader_t::get_variable_values_from_sol_file(
132147
initial_solution_file, mps_data_model.get_variable_names());
133148

134-
if (is_mip && !solve_relaxation) {
149+
if (is_mip) {
135150
auto& mip_settings = settings.get_mip_settings();
136151
if (initial_solution.size() > 0) {
137152
mip_settings.add_initial_solution(initial_solution.data(), initial_solution.size());
138153
}
139-
auto solution = cuopt::linear_programming::solve_mip(op_problem, mip_settings);
140154
} else {
141155
auto& lp_settings = settings.get_pdlp_settings();
142156
if (initial_solution.size() > 0) {
143157
lp_settings.set_initial_primal_solution(initial_solution.data(), initial_solution.size());
144158
}
145-
auto solution = cuopt::linear_programming::solve_lp(op_problem, lp_settings);
159+
}
160+
} catch (const std::exception& e) {
161+
auto log = dummy_logger(settings);
162+
CUOPT_LOG_ERROR("Error: %s", e.what());
163+
return -1;
164+
}
165+
166+
try {
167+
if (is_mip) {
168+
auto& mip_settings = settings.get_mip_settings();
169+
auto solution = cuopt::linear_programming::solve_mip(op_problem, mip_settings);
170+
} else {
171+
auto& lp_settings = settings.get_pdlp_settings();
172+
auto solution = cuopt::linear_programming::solve_lp(op_problem, lp_settings);
146173
}
147174
} catch (const std::exception& e) {
148175
CUOPT_LOG_ERROR("Error: %s", e.what());
149176
return -1;
150177
}
178+
151179
return 0;
152180
}
153181

cpp/src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# limitations under the License.
1515

1616
set(UTIL_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/utilities/seed_generator.cu
17-
${CMAKE_CURRENT_SOURCE_DIR}/utilities/logger_helper.cpp
17+
${CMAKE_CURRENT_SOURCE_DIR}/utilities/logger.cpp
1818
${CMAKE_CURRENT_SOURCE_DIR}/utilities/version_info.cpp
1919
${CMAKE_CURRENT_SOURCE_DIR}/utilities/timestamp_utils.cpp)
2020

cpp/src/dual_simplex/cusparse_view.cu

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ cusparse_view_t<i_t, f_t>::cusparse_view_t(raft::handle_t const* handle_ptr,
138138
d_minus_one_(f_t(-1), handle_ptr->get_stream()),
139139
d_zero_(f_t(0), handle_ptr->get_stream())
140140
{
141+
RAFT_CUBLAS_TRY(raft::linalg::detail::cublassetpointermode(
142+
handle_ptr->get_cublas_handle(), CUBLAS_POINTER_MODE_DEVICE, handle_ptr->get_stream()));
143+
RAFT_CUSPARSE_TRY(raft::sparse::detail::cusparsesetpointermode(
144+
handle_ptr->get_cusparse_handle(), CUSPARSE_POINTER_MODE_DEVICE, handle_ptr->get_stream()));
141145
// TMP matrix data should already be on the GPU
142146
constexpr bool debug = false;
143147
if (debug) { printf("A hash: %zu\n", A.hash()); }

cpp/src/dual_simplex/logger.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#pragma once
1919

2020
#ifdef CUOPT_LOG_ACTIVE_LEVEL
21-
#include <cuopt/logger.hpp>
21+
#include <utilities/logger.hpp>
2222
#endif
2323

2424
#include <string>

cpp/src/linear_programming/cuopt_c.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
#include <cuopt/linear_programming/optimization_problem.hpp>
2121
#include <cuopt/linear_programming/solve.hpp>
2222
#include <cuopt/linear_programming/solver_settings.hpp>
23-
#include <cuopt/logger.hpp>
2423
#include <cuopt/utilities/timestamp_utils.hpp>
24+
#include <utilities/logger.hpp>
2525

2626
#include <mps_parser/parser.hpp>
2727

cpp/src/linear_programming/optimization_problem.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
*/
1717

1818
#include <cuopt/error.hpp>
19-
#include <cuopt/logger.hpp>
2019
#include <mps_parser/writer.hpp>
20+
#include <utilities/logger.hpp>
2121

2222
#include <cuopt/linear_programming/optimization_problem.hpp>
2323
#include <mip/mip_constants.hpp>

cpp/src/linear_programming/solve.cu

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include <linear_programming/restart_strategy/pdlp_restart_strategy.cuh>
2121
#include <linear_programming/step_size_strategy/adaptive_step_size_strategy.hpp>
2222
#include <linear_programming/translate.hpp>
23-
#include <linear_programming/utilities/logger_init.hpp>
2423
#include <linear_programming/utilities/problem_checking.cuh>
2524
#include <linear_programming/utils.cuh>
25+
#include <utilities/logger.hpp>
2626

2727
#include <mip/mip_constants.hpp>
2828
#include <mip/presolve/third_party_presolve.hpp>
@@ -672,9 +672,8 @@ optimization_problem_solution_t<i_t, f_t> run_concurrent(
672672
// Initialize the dual simplex structures before we run PDLP.
673673
// Otherwise, CUDA API calls to the problem stream may occur in both threads and throw graph
674674
// capture off
675-
auto barrier_handle = raft::handle_t(*op_problem.get_handle_ptr());
676675
rmm::cuda_stream_view barrier_stream = rmm::cuda_stream_per_thread;
677-
raft::resource::set_cuda_stream(barrier_handle, barrier_stream);
676+
auto barrier_handle = raft::handle_t(barrier_stream);
678677
// Make sure allocations are done on the original stream
679678
problem.handle_ptr->sync_stream();
680679

cpp/src/linear_programming/solver_settings.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
#include <cuopt/error.hpp>
1919
#include <cuopt/linear_programming/pdlp/pdlp_warm_start_data.hpp>
2020
#include <cuopt/linear_programming/pdlp/solver_settings.hpp>
21-
#include <cuopt/logger.hpp>
2221
#include <math_optimization/solution_writer.hpp>
2322
#include <mip/mip_constants.hpp>
2423
#include <mps_parser/utilities/span.hpp>
24+
#include <utilities/logger.hpp>
2525

2626
#include <raft/util/cudart_utils.hpp>
2727

cpp/src/linear_programming/solver_solution.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
*/
1717

1818
#include <cuopt/linear_programming/pdlp/solver_solution.hpp>
19-
#include <cuopt/logger.hpp>
2019
#include <math_optimization/solution_writer.hpp>
2120
#include <mip/mip_constants.hpp>
21+
#include <utilities/logger.hpp>
2222

2323
#include <raft/common/nvtx.hpp>
2424
#include <raft/util/cudart_utils.hpp>

0 commit comments

Comments
 (0)