138#define SET_EFFORT_LIMIT(LIMIT, NAME, START) \
139 uint64_t LIMIT; \
140 do { \
141 const uint64_t OLD_LIMIT = solver->statistics_.START; \
142 const uint64_t TICKS = solver->statistics_.search_ticks; \
143 const uint64_t LAST = solver->probing ? solver->last.ticks.probe \
144 : solver->last.ticks.eliminate; \
145 uint64_t REFERENCE = TICKS - LAST; \
146 const uint64_t MINEFFORT = 1e6 * GET_OPTION (mineffort); \
147 if (REFERENCE < MINEFFORT) { \
148 REFERENCE = MINEFFORT; \
149 kissat_extremely_verbose ( \
150 solver, #NAME " effort reference %s set to 'mineffort'", \
151 FORMAT_COUNT (REFERENCE)); \
152 } else { \
153 kissat_extremely_verbose ( \
154 solver, #NAME " effort reference %s = %s - %s 'search_ticks'", \
155 FORMAT_COUNT (REFERENCE), FORMAT_COUNT (TICKS), \
156 FORMAT_COUNT (LAST)); \
157 } \
158 const double EFFORT = (double) GET_OPTION (NAME##effort) * 1e-3; \
159 const uint64_t DELTA = EFFORT * REFERENCE; \
160\
161 kissat_extremely_verbose ( \
162 solver, #NAME " effort delta %s = %g * %s '" #START "'", \
163 FORMAT_COUNT (DELTA), EFFORT, FORMAT_COUNT (REFERENCE)); \
164\
165 const uint64_t NEW_LIMIT = OLD_LIMIT + DELTA; \
166 kissat_very_verbose (solver, \
167 #NAME " effort limit %s = %s + %s '" #START "'", \
168 FORMAT_COUNT (NEW_LIMIT), \
169 FORMAT_COUNT (OLD_LIMIT), FORMAT_COUNT (DELTA)); \
170\
171 LIMIT = NEW_LIMIT; \
172\
173 } while (0)