ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
kimits.h File Reference
#include <stdbool.h>
#include <stdint.h>
#include "global.h"
#include <inttypes.h>
Include dependency graph for kimits.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  bounds
 
struct  limits
 
struct  limited
 
struct  enabled
 
struct  delay
 
struct  delays
 
struct  remember
 

Macros

#define LOGN(COUNT)
 
#define LINEAR(COUNT)
 
#define NLOGN(COUNT)
 
#define NLOG2N(COUNT)
 
#define NLOG3N(COUNT)
 
#define SQRT(COUNT)
 
#define UPDATE_CONFLICT_LIMIT(NAME, COUNT, SCALE_COUNT_FUNCTION, SCALE_DELTA)
 
#define SET_EFFORT_LIMIT(LIMIT, NAME, START)
 
#define DELAYING(NAME)
 
#define BUMP_DELAY(NAME)
 
#define REDUCE_DELAY(NAME)
 

Typedefs

typedef typedefABC_NAMESPACE_HEADER_START struct bounds bounds
 
typedef struct changes changes
 
typedef struct delays delays
 
typedef struct delay delay
 
typedef struct remember remember
 
typedef struct enabled enabled
 
typedef struct limited limited
 
typedef struct limits limits
 

Functions

changes kissat_changes (struct kissat *)
 
bool kissat_changed (changes before, changes after)
 
void kissat_init_limits (struct kissat *)
 
uint64_t kissat_scale_delta (struct kissat *, const char *, uint64_t)
 
double kissat_nlogpown (uint64_t, unsigned)
 
double kissat_sqrt (uint64_t)
 
double kissat_logn (uint64_t)
 
bool kissat_delaying (struct kissat *, delay *)
 
void kissat_bump_delay (struct kissat *, delay *)
 
void kissat_reduce_delay (struct kissat *, delay *)
 

Macro Definition Documentation

◆ BUMP_DELAY

#define BUMP_DELAY ( NAME)
Value:
void kissat_bump_delay(kissat *solver, delay *delay)
Definition kimits.c:170
#define solver
Definition kitten.c:211

Definition at line 183 of file kimits.h.

◆ DELAYING

#define DELAYING ( NAME)
Value:
kissat_delaying (solver, &solver->delays.NAME)
bool kissat_delaying(kissat *solver, delay *delay)
Definition kimits.c:181

Definition at line 181 of file kimits.h.

◆ LINEAR

#define LINEAR ( COUNT)
Value:
(COUNT)

Definition at line 108 of file kimits.h.

◆ LOGN

#define LOGN ( COUNT)
Value:
kissat_logn (COUNT)
ABC_NAMESPACE_IMPL_START double kissat_logn(uint64_t count)
Definition kimits.c:15

Definition at line 107 of file kimits.h.

◆ NLOG2N

#define NLOG2N ( COUNT)
Value:
kissat_nlogpown (COUNT, 2)
double kissat_nlogpown(uint64_t count, unsigned exponent)
Definition kimits.c:29

Definition at line 110 of file kimits.h.

◆ NLOG3N

#define NLOG3N ( COUNT)
Value:
kissat_nlogpown (COUNT, 3)

Definition at line 111 of file kimits.h.

◆ NLOGN

#define NLOGN ( COUNT)
Value:
kissat_nlogpown (COUNT, 1)

Definition at line 109 of file kimits.h.

◆ REDUCE_DELAY

#define REDUCE_DELAY ( NAME)
Value:
void kissat_reduce_delay(kissat *solver, delay *delay)
Definition kimits.c:157

Definition at line 185 of file kimits.h.

185#define REDUCE_DELAY(NAME) \
186 kissat_reduce_delay (solver, &solver->delays.NAME)

◆ SET_EFFORT_LIMIT

#define SET_EFFORT_LIMIT ( LIMIT,
NAME,
START )

Definition at line 138 of file kimits.h.

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)

◆ SQRT

#define SQRT ( COUNT)
Value:
kissat_sqrt (COUNT)
double kissat_sqrt(uint64_t count)
Definition kimits.c:22

Definition at line 113 of file kimits.h.

◆ UPDATE_CONFLICT_LIMIT

#define UPDATE_CONFLICT_LIMIT ( NAME,
COUNT,
SCALE_COUNT_FUNCTION,
SCALE_DELTA )
Value:
do { \
if (solver->inconsistent) \
break; \
const struct statistics *statistics = &solver->statistics_; \
KISSAT_assert (statistics->COUNT > 0); \
struct limits *limits = &solver->limits; \
uint64_t DELTA = GET_OPTION (NAME##int); \
const double SCALING = SCALE_COUNT_FUNCTION (statistics->COUNT); \
KISSAT_assert (SCALING >= 1); \
DELTA *= SCALING; \
const uint64_t SCALED = \
!(SCALE_DELTA) ? DELTA \
: kissat_scale_delta (solver, #NAME, DELTA); \
limits->NAME.conflicts = CONFLICTS + SCALED; \
kissat_phase ( \
solver, #NAME, GET (COUNT), "new limit of %s after %s conflicts", \
FORMAT_COUNT (limits->NAME.conflicts), FORMAT_COUNT (SCALED)); \
} while (0)
#define FORMAT_COUNT(WORD)
Definition format.h:33
@ NAME
Definition inflate.h:29
uint64_t kissat_scale_delta(kissat *solver, const char *pretty, uint64_t delta)
Definition kimits.c:41
#define GET_OPTION(N)
Definition options.h:295
#define CONFLICTS
Definition statistics.h:335
#define GET(NAME)
Definition statistics.h:416
uint64_t conflicts
Definition kimits.h:27

Definition at line 115 of file kimits.h.

Typedef Documentation

◆ bounds

typedef typedefABC_NAMESPACE_HEADER_START struct bounds bounds

Definition at line 10 of file kimits.h.

◆ changes

typedef struct changes changes

Definition at line 11 of file kimits.h.

◆ delay

typedef struct delay delay

Definition at line 13 of file kimits.h.

◆ delays

typedef struct delays delays

Definition at line 12 of file kimits.h.

◆ enabled

typedef struct enabled enabled

Definition at line 15 of file kimits.h.

◆ limited

typedef struct limited limited

Definition at line 16 of file kimits.h.

◆ limits

typedef struct limits limits

Definition at line 17 of file kimits.h.

◆ remember

typedef struct remember remember

Definition at line 14 of file kimits.h.

Function Documentation

◆ kissat_bump_delay()

void kissat_bump_delay ( struct kissat * solver,
delay * delay )

Definition at line 170 of file kimits.c.

170 {
171 delay->current += delay->current < UINT_MAX;
173 solver, "%s delay interval increased to %u",
174 delay_description (solver, delay), delay->current);
176#ifdef KISSAT_QUIET
177 (void) solver;
178#endif
179}
#define VERY_VERBOSE_IF_NOT_BUMPREASONS(...)
Definition kimits.c:154
Definition kimits.h:71
unsigned current
Definition kimits.h:73
unsigned count
Definition kimits.h:72

◆ kissat_changed()

bool kissat_changed ( changes before,
changes after )

◆ kissat_changes()

changes kissat_changes ( struct kissat * )

◆ kissat_delaying()

bool kissat_delaying ( struct kissat * solver,
delay * delay )

Definition at line 181 of file kimits.c.

181 {
182 if (delay->count) {
183 delay->count--;
185 solver, "%s still delayed (%u more times)",
186 delay_description (solver, delay), delay->current);
187 return true;
188 } else {
189 VERY_VERBOSE_IF_NOT_BUMPREASONS (solver, "%s not delayed",
190 delay_description (solver, delay));
191 return false;
192 }
193#ifdef KISSAT_QUIET
194 (void) solver;
195#endif
196}

◆ kissat_init_limits()

void kissat_init_limits ( struct kissat * solver)

Definition at line 101 of file kimits.c.

101 {
102 KISSAT_assert (solver->statistics_.searches == 1);
103
104 init_enabled (solver);
105
106 limits *limits = &solver->limits;
107
108 if (GET_OPTION (randec))
109 INIT_CONFLICT_LIMIT (randec, false);
110
111 if (GET_OPTION (reduce))
113
114 if (GET_OPTION (reorder))
115 INIT_CONFLICT_LIMIT (reorder, false);
116
117 if (GET_OPTION (rephase))
118 INIT_CONFLICT_LIMIT (rephase, false);
119
120 if (!solver->stable)
122
124
125 if (solver->enabled.eliminate) {
126 INIT_CONFLICT_LIMIT (eliminate, true);
127 solver->bounds.eliminate.max_bound_completed = 0;
128 solver->bounds.eliminate.additional_clauses = 0;
129 kissat_very_verbose (solver, "reset elimination bound to zero");
130 }
131
132 if (solver->enabled.probe)
133 INIT_CONFLICT_LIMIT (probe, true);
134}
pcover reduce()
#define INIT_CONFLICT_LIMIT(NAME, SCALE)
Definition kimits.c:90
#define KISSAT_assert(ignore)
Definition global.h:13
ABC_NAMESPACE_IMPL_START void kissat_init_mode_limit(kissat *solver)
Definition mode.c:21
#define kissat_very_verbose(...)
Definition print.h:52
void kissat_update_focused_restart_limit(kissat *solver)
Definition restart.c:41
Here is the call graph for this function:

◆ kissat_logn()

double kissat_logn ( uint64_t count)

Definition at line 15 of file kimits.c.

15 {
16 KISSAT_assert (count > 0);
17 const double res = log10 (count + 9);
18 KISSAT_assert (res >= 1);
19 return res;
20}
Here is the caller graph for this function:

◆ kissat_nlogpown()

double kissat_nlogpown ( uint64_t count,
unsigned exponent )

Definition at line 29 of file kimits.c.

29 {
30 KISSAT_assert (count > 0);
31 const double tmp = log10 (count + 9);
32 double factor = 1;
33 while (exponent--)
34 factor *= tmp;
35 KISSAT_assert (factor >= 1);
36 const double res = count * factor;
37 KISSAT_assert (res >= 1);
38 return res;
39}

◆ kissat_reduce_delay()

void kissat_reduce_delay ( struct kissat * solver,
delay * delay )

Definition at line 157 of file kimits.c.

157 {
158 if (!delay->current)
159 return;
160 delay->current /= 2;
162 solver, "%s delay interval decreased to %u",
163 delay_description (solver, delay), delay->current);
165#ifdef KISSAT_QUIET
166 (void) solver;
167#endif
168}

◆ kissat_scale_delta()

uint64_t kissat_scale_delta ( struct kissat * solver,
const char * pretty,
uint64_t delta )

Definition at line 41 of file kimits.c.

42 {
43 const uint64_t C = BINIRR_CLAUSES;
44 double f = kissat_logn (C + 1) - 5;
45 const double ff = f * f;
46 KISSAT_assert (ff >= 0);
47 const double fff = 4.5 * ff + 25;
48 uint64_t scaled = fff * delta;
49 KISSAT_assert (delta <= scaled);
50 // clang-format off
52 "scaled %s delta %" PRIu64
53 " = %g * %" PRIu64
54 " = (4.5 (log10(%" PRIu64 ") - 5)^2 + 25) * %" PRIu64,
55 pretty, scaled, fff, delta, C, delta);
56 // clang-format on
57 (void) pretty;
58 return scaled;
59}
#define BINIRR_CLAUSES
Definition statistics.h:341
Here is the call graph for this function:

◆ kissat_sqrt()

double kissat_sqrt ( uint64_t count)

Definition at line 22 of file kimits.c.

22 {
23 KISSAT_assert (count > 0);
24 const double res = sqrt (count);
25 KISSAT_assert (res >= 1);
26 return res;
27}