Skip to content

Commit 45839ce

Browse files
committed
Single buffer for as solves
1 parent 23b48c1 commit 45839ce

4 files changed

Lines changed: 18 additions & 18 deletions

File tree

highs/ipm/hipo/ipm/FactorHighsSolver.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,20 +134,20 @@ Int FactorHighsSolver::solveAS(const std::vector<double>& rhs_x,
134134

135135
Int n = rhs_x.size();
136136

137-
std::vector<double> rhs;
138-
rhs.insert(rhs.end(), rhs_x.begin(), rhs_x.end());
139-
rhs.insert(rhs.end(), rhs_y.begin(), rhs_y.end());
137+
as_buffer_.resize(rhs_x.size() + rhs_y.size());
138+
std::copy(rhs_x.begin(), rhs_x.end(), as_buffer_.begin());
139+
std::copy(rhs_y.begin(), rhs_y.end(), as_buffer_.begin() + n);
140140

141141
Clock clock;
142-
if (FH_.solve(rhs.data())) return kErrorSolve;
142+
if (FH_.solve(as_buffer_.data())) return kErrorSolve;
143143

144144
info_.solve_time += clock.stop();
145145
info_.solve_number++;
146146

147147
data_.back().num_solves++;
148148

149-
lhs_x = std::vector<double>(rhs.begin(), rhs.begin() + n);
150-
lhs_y = std::vector<double>(rhs.begin() + n, rhs.end());
149+
lhs_x.assign(as_buffer_.begin(), as_buffer_.begin() + n);
150+
lhs_y.assign(as_buffer_.begin() + n, as_buffer_.end());
151151

152152
return kOk;
153153
}

highs/ipm/hipo/ipm/FactorHighsSolver.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ namespace hipo {
1616

1717
class FactorHighsSolver : public LinearSolver {
1818
FHsolver FH_;
19-
2019
KktMatrix& kkt_;
21-
2220
const Regularisation& regul_;
2321
Info& info_;
2422
IpmData& data_;
2523
const Logger& logger_;
2624
const Model& model_;
2725
Options& options_;
2826

27+
std::vector<double> as_buffer_;
28+
2929
std::string ordering_AS_ = "none";
3030
std::string ordering_NE_ = "none";
3131

highs/ipm/hipo/ipm/UpLookingSolver.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -249,22 +249,20 @@ Int UpLookingSolver::solveAS(const std::vector<double>& rhs_x,
249249

250250
Int n = rhs_x.size();
251251

252-
// create single rhs
253-
std::vector<double> rhs;
254-
rhs.insert(rhs.end(), rhs_x.begin(), rhs_x.end());
255-
rhs.insert(rhs.end(), rhs_y.begin(), rhs_y.end());
252+
as_buffer_.resize(rhs_x.size() + rhs_y.size());
253+
std::copy(rhs_x.begin(), rhs_x.end(), as_buffer_.begin());
254+
std::copy(rhs_y.begin(), rhs_y.end(), as_buffer_.begin() + n);
256255

257256
Clock clock;
258-
permuteVectorInverse(rhs, kkt_.iperm());
259-
solve(rhs);
260-
permuteVector(rhs, kkt_.iperm());
257+
permuteVectorInverse(as_buffer_, kkt_.iperm());
258+
solve(as_buffer_);
259+
permuteVector(as_buffer_, kkt_.iperm());
261260
info_.solve_time += clock.stop();
262261
info_.solve_number++;
263262
data_.back().num_solves++;
264263

265-
// split lhs
266-
lhs_x = std::vector<double>(rhs.begin(), rhs.begin() + n);
267-
lhs_y = std::vector<double>(rhs.begin() + n, rhs.end());
264+
lhs_x.assign(as_buffer_.begin(), as_buffer_.begin() + n);
265+
lhs_y.assign(as_buffer_.begin() + n, as_buffer_.end());
268266

269267
return kOk;
270268
}

highs/ipm/hipo/ipm/UpLookingSolver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class UpLookingSolver : public LinearSolver {
3535
std::vector<Int> parent_;
3636
double flops_;
3737

38+
std::vector<double> as_buffer_;
39+
3840
Info& info_;
3941
IpmData& data_;
4042
const Regularisation& regul_;

0 commit comments

Comments
 (0)