27
27
#include < cuopt/version_config.hpp>
28
28
29
29
#include < memory>
30
+ #include < cstdlib>
30
31
#include < string>
31
32
33
+
32
34
using namespace cuopt ::mps_parser;
33
35
using namespace cuopt ::linear_programming;
34
36
@@ -74,6 +76,29 @@ cuopt_int_t cuOptGetVersion(cuopt_int_t* version_major,
74
76
return CUOPT_SUCCESS;
75
77
}
76
78
79
+ bool extraTimestamps () {
80
+ const char * envValue = std::getenv (" CUOPT_EXTRA_TIMESTAMPS" );
81
+ if (envValue == nullptr ) {
82
+ return false ;
83
+ }
84
+
85
+ std::string value (envValue);
86
+ return (value == " True" || value == " true" || value == " 1" );
87
+ }
88
+
89
+
90
+ double getCurrentTimestamp () {
91
+ auto now = std::chrono::system_clock::now ();
92
+ return std::chrono::duration<double >(now.time_since_epoch ()).count ();
93
+ }
94
+
95
+ void printTimestamp (const std::string& label) {
96
+ if (extraTimestamps ()) {
97
+ std::cout << std::fixed << std::setprecision (6 );
98
+ std::cout << std::endl << label << " : " << getCurrentTimestamp () << std::endl;
99
+ }
100
+ }
101
+
77
102
cuopt_int_t cuOptReadProblem (const char * filename, cuOptOptimizationProblem* problem_ptr)
78
103
{
79
104
problem_and_stream_view_t * problem_and_stream = new problem_and_stream_view_t ();
@@ -115,6 +140,9 @@ cuopt_int_t cuOptCreateProblem(cuopt_int_t num_constraints,
115
140
const char * variable_types,
116
141
cuOptOptimizationProblem* problem_ptr)
117
142
{
143
+
144
+ printTimestamp (" CUOPT_CREATE_PROBLEM" );
145
+
118
146
if (problem_ptr == nullptr || objective_coefficients == nullptr ||
119
147
constraint_matrix_row_offsets == nullptr || constraint_matrix_column_indices == nullptr ||
120
148
constraint_matrix_coefficent_values == nullptr || constraint_sense == nullptr ||
@@ -170,6 +198,9 @@ cuopt_int_t cuOptCreateRangedProblem(cuopt_int_t num_constraints,
170
198
const char * variable_types,
171
199
cuOptOptimizationProblem* problem_ptr)
172
200
{
201
+
202
+ printTimestamp (" CUOPT_CREATE_PROBLEM" );
203
+
173
204
if (problem_ptr == nullptr || objective_coefficients == nullptr ||
174
205
constraint_matrix_row_offsets == nullptr || constraint_matrix_column_indices == nullptr ||
175
206
constraint_matrix_coefficent_values == nullptr || constraint_lower_bounds == nullptr ||
@@ -596,6 +627,8 @@ cuopt_int_t cuOptSolve(cuOptOptimizationProblem problem,
596
627
cuOptSolverSettings settings,
597
628
cuOptSolution* solution_ptr)
598
629
{
630
+ printTimestamp (" CUOPT_SOLVE_START" );
631
+
599
632
if (problem == nullptr ) { return CUOPT_INVALID_ARGUMENT; }
600
633
if (settings == nullptr ) { return CUOPT_INVALID_ARGUMENT; }
601
634
if (solution_ptr == nullptr ) { return CUOPT_INVALID_ARGUMENT; }
@@ -614,6 +647,9 @@ cuopt_int_t cuOptSolve(cuOptOptimizationProblem problem,
614
647
solution_and_stream_view->mip_solution_ptr = new mip_solution_t <cuopt_int_t , cuopt_float_t >(
615
648
solve_mip<cuopt_int_t , cuopt_float_t >(*op_problem, mip_settings));
616
649
*solution_ptr = static_cast <cuOptSolution>(solution_and_stream_view);
650
+
651
+ printTimestamp (" CUOPT_SOLVE_RETURN" );
652
+
617
653
return static_cast <cuopt_int_t >(
618
654
solution_and_stream_view->mip_solution_ptr ->get_error_status ().get_error_type ());
619
655
} else {
@@ -629,6 +665,9 @@ cuopt_int_t cuOptSolve(cuOptOptimizationProblem problem,
629
665
new optimization_problem_solution_t <cuopt_int_t , cuopt_float_t >(
630
666
solve_lp<cuopt_int_t , cuopt_float_t >(*op_problem, pdlp_settings));
631
667
*solution_ptr = static_cast <cuOptSolution>(solution_and_stream_view);
668
+
669
+ printTimestamp (" CUOPT_SOLVE_RETURN" );
670
+
632
671
return static_cast <cuopt_int_t >(
633
672
solution_and_stream_view->lp_solution_ptr ->get_error_status ().get_error_type ());
634
673
}
0 commit comments