3#if !defined(KISSAT_QUIET) || !defined(KISSAT_NDEBUG)
21 const int64_t stable =
solver->statistics.clauses_used_stable;
22 const int64_t focused =
solver->statistics.clauses_used_focused;
23 if (!stable && !focused)
24 printf (
"%sno clauses used at all\n",
solver->prefix);
28 if (focused && stable)
43 const double time = kissat_process_time ();
44 size_t variables =
solver->statistics.variables_original;
46 const double rss = kissat_maximum_resident_set_size ();
51#define RELATIVE(FIRST,SECOND) \
52 kissat_average (statistics->FIRST, statistics->SECOND)
56#define CONF_INT(NAME) \
57 RELATIVE (conflicts, NAME)
59#define SWEEPS_PER_COMPLETED(NAME) \
60 RELATIVE (sweep, NAME)
62#define NO_SECONDARY(NAME) \
67#define PER_BACKBONE(NAME) \
68 RELATIVE (NAME, backbone_computations)
70#define PER_BACKBONE_UNIT(NAME) \
71 RELATIVE (NAME, backbone_units)
73#define PER_CLOSURE(NAME) \
74 RELATIVE(NAME, closures)
76#define PER_CLS_ADDED(NAME) \
77 RELATIVE (NAME, clauses_added)
79#define PER_CLS_FACTORED(NAME) \
80 RELATIVE (NAME, clauses_factored)
82#define PER_CLS_LEARNED(NAME) \
83 RELATIVE (NAME, clauses_learned)
85#define PER_CLS_UNFACTORED(NAME) \
86 RELATIVE (NAME, clauses_unfactored)
88#define PER_CONFLICT(NAME) \
89 RELATIVE (NAME, conflicts)
91#define PER_CONGRANDS(NAME) \
92 RELATIVE (NAME, congruent_gates_ands)
94#define PER_CONGRGATES(NAME) \
95 RELATIVE (NAME, congruent_gates)
97#define PER_CONGRITES(NAME) \
98 RELATIVE (NAME, congruent_gates_ites)
100#define PER_CONGRLOOKUP(NAME) \
101 RELATIVE (NAME, congruent_lookups)
103#define PER_CONGRXORS(NAME) \
104 RELATIVE (NAME, congruent_gates_xors)
106#define PER_FIXED(NAME) \
107 RELATIVE (NAME, units)
110#define PER_FLIPPED(NAME) \
113#define PER_FLIPPED(NAME) \
114 RELATIVE (NAME, flipped)
117#define PER_FORWARD_CHECK(NAME) \
118 RELATIVE (NAME, forward_checks)
120#define PER_KITTEN_PROP(NAME) \
121 RELATIVE (NAME, kitten_propagations)
123#define PER_KITTEN_SOLVED(NAME) \
124 RELATIVE (NAME, kitten_solved)
126#define PER_PROPAGATION(NAME) \
127 RELATIVE (NAME, propagations)
129#define PER_RESTART(NAME) \
130 RELATIVE (NAME, restarts)
132#define PER_SECOND(NAME) \
133 kissat_average (statistics->NAME, time)
135#define PER_SWEEP_VARIABLES(NAME) \
136 kissat_average (statistics->NAME, statistics->sweep_variables)
138#define PER_VARIABLE(NAME) \
139 kissat_average (statistics->NAME, variables)
141#define PER_VIVIFICATION(NAME) \
142 RELATIVE (NAME, vivifications)
144#define PER_VIVIFY_CHECK(NAME) \
145 RELATIVE (NAME, vivify_checks)
148#define PER_WALKS(NAME) \
151#define PER_WALKS(NAME) \
152 RELATIVE (NAME, walks)
157#define PERCENT(FIRST,SECOND) \
158 kissat_percent (statistics->FIRST, statistics->SECOND)
162#define PCNT_ARENA_RESIZED(NAME) \
163 PERCENT (NAME, arena_resized)
165#define PCNT_CLS_ADDED(NAME) \
166 PERCENT (NAME, clauses_added)
168#define PCNT_CLS_IMPROVED(NAME) \
169 PERCENT (NAME, clauses_improved)
171#define PCNT_CLS_IMPROVED(NAME) \
172 PERCENT (NAME, clauses_improved)
174#define PCNT_CLS_FACTORED(NAME) \
175 PERCENT (NAME, clauses_factored)
177#define PCNT_CLS_LEARNED(NAME) \
178 PERCENT (NAME, clauses_learned)
180#define PCNT_CLS_ORIGINAL(NAME) \
181 PERCENT (NAME, clauses_original)
183#define PCNT_CLS_REDUCED(NAME) \
184 PERCENT (NAME, clauses_reduced)
186#define PCNT_CLS_USED(NAME) \
187 PERCENT (NAME, clauses_used)
189#define PCNT_COLLECTIONS(NAME) \
190 PERCENT (NAME, garbage_collections)
192#define PCNT_CONFLICTS(NAME) \
193 PERCENT (NAME, conflicts)
195#define PCNT_CONGRCOLS(NAME) \
196 PERCENT (NAME, congruent_collisions)
198#define PCNT_CONGRGATES(NAME) \
199 PERCENT (NAME, congruent_gates)
201#define PCNT_CONGRLOOKUP(NAME) \
202 PERCENT (NAME, congruent_lookups)
204#define PCNT_CONGRMATCHED(NAME) \
205 PERCENT (NAME, congruent_matched)
207#define PCNT_CONGREWR(NAME) \
208 PERCENT (NAME, congruent_rewritten)
210#define PCNT_CONGRSIMPS(NAME) \
211 PERCENT (NAME, congruent_simplified)
213#define PCNT_CONGRUENT(NAME) \
214 PERCENT (NAME, congruent)
216#define PCNT_CONGRUNARY(NAME) \
217 PERCENT (NAME, congruent_unary)
219#define PCNT_DECISIONS(NAME) \
220 PERCENT (NAME, decisions)
222#define PCNT_DEFRAGS(NAME) \
223 PERCENT (NAME, defragmentations)
225#define PCNT_ELIM_ATTEMPTS(NAME) \
226 PERCENT (NAME, eliminate_attempted)
228#define PCNT_ELIMINATED(NAME) \
229 PERCENT (NAME, eliminated)
231#define PCNT_EXTRACTED(NAME) \
232 PERCENT (NAME, gates_extracted)
234#define PCNT_IRREDUNDANT(NAME) \
235 PERCENT (NAME, clauses_irredundant)
237#define PCNT_KITTEN_FLIP(NAME) \
238 PERCENT (NAME, kitten_flip)
240#define PCNT_KITTEN_SOLVED(NAME) \
241 PERCENT (NAME, kitten_solved)
243#define PCNT_LITS_DEDUCED(NAME) \
244 PERCENT (NAME, literals_deduced)
246#define PCNT_LITS_SHRUNKEN(NAME) \
247 PERCENT (NAME, literals_shrunken)
249#define PCNT_PROPS(NAME) \
250 PERCENT (NAME, propagations)
252#define PCNT_REDUCTIONS(NAME) \
253 PERCENT (NAME, reductions)
255#define PCNT_REDUNDANT_CLAUSES(NAME) \
256 PERCENT (NAME, clauses_redundant)
258#define PCNT_REORDERED(NAME) \
259 PERCENT (NAME, reordered)
261#define PCNT_REPHASED(NAME) \
262 PERCENT (NAME, rephased)
264#define PCNT_RESIDENT_SET(NAME) \
265 kissat_percent (statistics->NAME, rss)
267#define PCNT_RESTARTS(NAME) \
268 PERCENT (NAME, restarts)
270#define PCNT_RESTARTS_LEVELS(NAME) \
271 PERCENT (NAME, restarts_levels)
273#define PCNT_SEARCHES(NAME) \
274 PERCENT (NAME, searches)
276#define PCNT_STRENGTHENED(NAME) \
277 PERCENT (NAME, strengthened)
279#define PCNT_SUBSUMED(NAME) \
280 PERCENT (NAME, subsumed)
282#define PCNT_SUBSUMPTION_CHECK(NAME) \
283 PERCENT (NAME, subsumption_checks)
285#define PCNT_SWEEP_FLIP_BACKBONE(NAME) \
286 PERCENT (NAME, sweep_flip_backbone)
288#define PCNT_SWEEP_FLIP_EQUIVALENCES(NAME) \
289 PERCENT (NAME, sweep_flip_equivalences)
291#define PCNT_SWEEP_SOLVED_BACKBONE(NAME) \
292 PERCENT (NAME, sweep_solved_backbone)
294#define PCNT_SWEEP_SOLVED_EQUIVALENCES(NAME) \
295 PERCENT (NAME, sweep_solved_equivalences)
297#define PCNT_SWEEP_SOLVED(NAME) \
298 PERCENT (NAME, sweep_solved)
301#define PCNT_TICKS(NAME) \
304#define PCNT_TICKS(NAME) \
305 PERCENT (NAME, ticks)
308#define PCNT_VARIABLES(NAME) \
309 kissat_percent (statistics->NAME, variables)
311#define PCNT_VIVIFIED(NAME) \
312 PERCENT (NAME, vivified)
314#define PCNT_VIVIFY_IMP(NAME) \
315 PERCENT (NAME, vivified_implied)
317#define PCNT_VIVIFY_INST(NAME) \
318 PERCENT (NAME, vivified_instantiated)
320#define PCNT_VIVIFY_CHECK(NAME) \
321 PERCENT (NAME, vivify_checks)
323#define PCNT_VIVIFY_PROBES(NAME) \
324 PERCENT (NAME, vivify_probes)
326#define PCNT_VIVIFY_SHRUNKEN(NAME) \
327 PERCENT (NAME, vivified_shrunken)
329#define PCNT_VIVIFY_SUB(NAME) \
330 PERCENT (NAME, vivified_subsumed)
332#define PCNT_WALKS(NAME) \
333 PERCENT (NAME, walks)
335#define COUNTER(NAME,VERBOSE,OTHER,UNITS,TYPE) \
336 if (verbose || !VERBOSE || (VERBOSE == 1 && statistics->NAME)) \
337 PRINT_STAT (#NAME, statistics->NAME, OTHER(NAME), UNITS, TYPE);
353#elif defined(KISSAT_NDEBUG)
375 size_t redundant = 0;
377 size_t arena_garbage = 0;
381 arena_garbage += kissat_actual_bytes_of_clause (c);
424 (void) arena_garbage;
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define all_literals(LIT)
#define KISSAT_assert(ignore)
ABC_NAMESPACE_IMPL_START int kissat_statistics_dummy_to_avoid_warning
#define METRICS_COUNTERS_AND_STATISTICS
#define kissat_check_statistics(...)
void kissat_print_tier_usage_statistics(kissat *solver, bool stable)
#define all_binary_blocking_watches(WATCH, WATCHES)
#define all_binary_large_watches(WATCH, WATCHES)