Skip to content

Commit c007739

Browse files
committed
Really added HiPdlpTimer.h
1 parent 9ba4534 commit c007739

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed

highs/pdlp/HiPdlpTimer.h

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2+
/* */
3+
/* This file is part of the HiGHS linear optimization suite */
4+
/* */
5+
/* Available as open-source under the MIT License */
6+
/* */
7+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
8+
/**@file pdlp/HiPdlpTimer.h
9+
* @brief Indices of HiPDLP iClocks
10+
*/
11+
#ifndef PDLP_HIPDLPTIMER_H_
12+
#define PDLP_HIPDLPTIMER_H_
13+
14+
// Clocks for profiling HiPDLP
15+
enum iClockHipdlp {
16+
kHipdlpClockTotal = 0,
17+
kHipdlpClockPreprocess,
18+
kHipdlpClockSolve,
19+
kHipdlpClockPostprocess,
20+
// Solve clocks
21+
kHipdlpClockIterateUpdate,
22+
kHipdlpClockConvergenceCheck,
23+
kHipdlpClockRestartCheck,
24+
kHipdlpClockAverageIterate,
25+
// IterateUpdate clocks
26+
kHipdlpClockMatrixMultiply,
27+
kHipdlpClockMatrixTransposeMultiply,
28+
kHipdlpClockProjection,
29+
kHipdlpClockStepSizeAdjustment,
30+
// AverageIterate clocks
31+
kHipdlpClockAverageIterateMatrixMultiply,
32+
kHipdlpClockAverageIterateMatrixTransposeMultiply,
33+
34+
kNumHipdlpClock //!< Number of HIPDLP clocks
35+
};
36+
37+
const double tolerance_percent_report = 0.1;
38+
39+
class HipdlpTimer {
40+
public:
41+
void initialiseHipdlpClocks(HighsTimerClock& hipdlp_timer_clock) {
42+
HighsTimer* timer_pointer = hipdlp_timer_clock.timer_pointer_;
43+
std::vector<HighsInt>& clock = hipdlp_timer_clock.clock_;
44+
45+
clock.resize(kNumHipdlpClock);
46+
clock[kHipdlpClockTotal] = 0;
47+
clock[kHipdlpClockPreprocess] =
48+
timer_pointer->clock_def("HiPDLP preprocess");
49+
clock[kHipdlpClockSolve] =
50+
timer_pointer->clock_def("HiPDLP solve");
51+
clock[kHipdlpClockPostprocess] =
52+
timer_pointer->clock_def("HiPDLP postprocess");
53+
clock[kHipdlpClockIterateUpdate] =
54+
timer_pointer->clock_def("Iterate update");
55+
clock[kHipdlpClockMatrixMultiply] =
56+
timer_pointer->clock_def("Ax");
57+
clock[kHipdlpClockMatrixTransposeMultiply] =
58+
timer_pointer->clock_def("Aty");
59+
clock[kHipdlpClockProjection] =
60+
timer_pointer->clock_def("Projection");
61+
clock[kHipdlpClockStepSizeAdjustment] =
62+
timer_pointer->clock_def("Step size adjustment");
63+
clock[kHipdlpClockConvergenceCheck] =
64+
timer_pointer->clock_def("Convergence check");
65+
clock[kHipdlpClockRestartCheck] =
66+
timer_pointer->clock_def("Restart check");
67+
clock[kHipdlpClockAverageIterate] =
68+
timer_pointer->clock_def("Average iterate");
69+
clock[kHipdlpClockAverageIterateMatrixMultiply] =
70+
timer_pointer->clock_def("Average iterate Ax");
71+
clock[kHipdlpClockAverageIterateMatrixTransposeMultiply] =
72+
timer_pointer->clock_def("Average iterate Aty");
73+
};
74+
75+
bool reportHipdlpClockList(const char* grepStamp,
76+
const std::vector<HighsInt> hipdlp_clock_list,
77+
const HighsTimerClock& hipdlp_timer_clock,
78+
const HighsInt kHipdlpClockIdeal = kHipdlpClockTotal,
79+
const double tolerance_percent_report_ = -1) {
80+
HighsTimer* timer_pointer = hipdlp_timer_clock.timer_pointer_;
81+
if (!timer_pointer->printf_flag) return false;
82+
const std::vector<HighsInt>& clock = hipdlp_timer_clock.clock_;
83+
HighsInt hipdlp_clock_list_size = hipdlp_clock_list.size();
84+
std::vector<HighsInt> clockList;
85+
clockList.resize(hipdlp_clock_list_size);
86+
for (HighsInt en = 0; en < hipdlp_clock_list_size; en++) {
87+
clockList[en] = clock[hipdlp_clock_list[en]];
88+
}
89+
const double ideal_sum_time =
90+
timer_pointer->clock_time[clock[kHipdlpClockIdeal]];
91+
const double tolerance_percent_report =
92+
tolerance_percent_report_ >= 0 ? tolerance_percent_report_ : 1e-8;
93+
return timer_pointer->reportOnTolerance(
94+
grepStamp, clockList, ideal_sum_time, tolerance_percent_report);
95+
};
96+
97+
void reportHipdlpCoreClock(const HighsTimerClock& hipdlp_timer_clock) {
98+
const std::vector<HighsInt> hipdlp_clock_list{
99+
kHipdlpClockPreprocess, kHipdlpClockSolve, kHipdlpClockPostprocess};
100+
reportHipdlpClockList("HipdlpCore___", hipdlp_clock_list, hipdlp_timer_clock,
101+
kHipdlpClockTotal);
102+
};
103+
104+
void reportHipdlpSolveClock(const HighsTimerClock& hipdlp_timer_clock) {
105+
const std::vector<HighsInt> hipdlp_clock_list{
106+
kHipdlpClockIterateUpdate, kHipdlpClockConvergenceCheck,
107+
kHipdlpClockRestartCheck, kHipdlpClockAverageIterate
108+
};
109+
reportHipdlpClockList("HipdlpSolve__", hipdlp_clock_list, hipdlp_timer_clock,
110+
kHipdlpClockSolve);
111+
};
112+
113+
void reportHipdlpIterateUpdateClock(const HighsTimerClock& hipdlp_timer_clock) {
114+
const std::vector<HighsInt> hipdlp_clock_list{
115+
kHipdlpClockMatrixMultiply, kHipdlpClockMatrixTransposeMultiply,
116+
kHipdlpClockProjection, kHipdlpClockStepSizeAdjustment
117+
};
118+
reportHipdlpClockList("HipdlpIterUpd", hipdlp_clock_list, hipdlp_timer_clock,
119+
kHipdlpClockIterateUpdate);
120+
};
121+
122+
void reportHipdlpAverageIterateClock(const HighsTimerClock& hipdlp_timer_clock) {
123+
const std::vector<HighsInt> hipdlp_clock_list{
124+
kHipdlpClockAverageIterateMatrixMultiply,
125+
kHipdlpClockAverageIterateMatrixTransposeMultiply
126+
};
127+
reportHipdlpClockList("HipdlpAvgIter", hipdlp_clock_list, hipdlp_timer_clock,
128+
kHipdlpClockAverageIterate);
129+
};
130+
131+
void reportHipdlpMatrixMultiplyClock(const HighsTimerClock& hipdlp_timer_clock) {
132+
const std::vector<HighsInt> hipdlp_clock_list{
133+
kHipdlpClockMatrixMultiply,
134+
kHipdlpClockMatrixTransposeMultiply,
135+
kHipdlpClockAverageIterateMatrixMultiply,
136+
kHipdlpClockAverageIterateMatrixTransposeMultiply
137+
};
138+
reportHipdlpClockList("HipdlpMtxMult", hipdlp_clock_list, hipdlp_timer_clock,
139+
kHipdlpClockSolve);
140+
};
141+
142+
};
143+
144+
#endif /* PDLP_HIPDLPTIMER_H_ */
145+

0 commit comments

Comments
 (0)