12void kissat_init_profiles (profiles *profiles) {
13#define PROF(NAME, LEVEL) profiles->NAME = (profile){LEVEL, #NAME, 0, 0};
18#define SIZE_PROFS (sizeof (profiles) / sizeof (profile))
20static inline bool less_profile (profile *
p, profile *q) {
21 if (
p->time > q->time)
23 if (
p->time < q->time)
25 return strcmp (
p->name, q->name) < 0;
28static void print_profile (
kissat *
solver, profile *
p,
double total) {
29 printf (
"%s%14.2f %7.2f %% %s\n",
solver->prefix,
p->time,
30 kissat_percent (
p->time, total),
p->name);
33static double flush_profile (profile *profile,
double now) {
34 const double delta = now - profile->entered;
35 profile->time += delta;
36 profile->entered = now;
40static void flush_profiles (profiles *profiles,
const double now) {
42 flush_profile (
p, now);
45static void push_profile (
kissat *
solver, profile *profile,
double now) {
46 profile->entered = now;
51 profiles *named = &
solver->profiles;
52 double now = kissat_process_time ();
53 flush_profiles (named, now);
54 profile *unsorted = (profile *) named;
55 profile *sorted[SIZE_PROFS];
56 const profile *
const end = unsorted + SIZE_PROFS;
58 for (profile *
p = unsorted;
p != end;
p++)
60 (
p == &named->search ||
p == &named->simplify ||
61 (
p != &named->total &&
p->time)))
64 const double total = named->total.time;
65 for (
size_t i = 0; i <
size; i++)
66 print_profile (
solver, sorted[i], total);
67 printf (
"%s=============================================\n",
69 print_profile (
solver, &named->total, total);
73 const double now = kissat_process_time ();
74 push_profile (
solver, profile, now);
80 const double now = kissat_process_time ();
81 flush_profile (profile, now);
84void kissat_stop_search_and_start_simplifier (
kissat *
solver,
86 struct profile *search = &PROFILE (search);
88 const double now = kissat_process_time ();
98 flush_profile (
mode, now);
104 flush_profile (search, now);
107 push_profile (
solver, profile, now);
110void kissat_stop_simplifier_and_resume_search (
kissat *
solver,
114 const double now = kissat_process_time ();
115 const double delta = flush_profile (
simplify, now);
117 const double entered = now - delta;
120 solver->mode.entered += delta;
121 if (top == profile) {
122 flush_profile (profile, now);
130 struct profile *search = &PROFILE (search);
134 push_profile (
solver, &PROFILE (search), now);
135 struct profile *
mode =
136 solver->stable ? &PROFILE (stable) : &PROFILE (focused);
143 const double now = kissat_process_time ();
144 flush_profiles (&
solver->profiles, now);
145 return PROFILE (total).time;
#define all_pointers(T, E, S)
pcover simplify(pcube *T)
#define KISSAT_assert(ignore)
#define INSERTION_SORT(TYPE, N, A, LESS)
int kissat_profile_dummy_to_avoid_warning