ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
kimits.h
Go to the documentation of this file.
1#ifndef _limits_h_INCLUDED
2#define _limits_h_INCLUDED
3
4#include <stdbool.h>
5#include <stdint.h>
6
7#include "global.h"
9
10typedef struct bounds bounds;
11typedef struct changes changes;
12typedef struct delays delays;
13typedef struct delay delay;
14typedef struct remember remember;
15typedef struct enabled enabled;
16typedef struct limited limited;
17typedef struct limits limits;
18
19struct bounds {
20 struct {
23 } eliminate;
24};
25
26struct limits {
27 uint64_t conflicts;
28 uint64_t decisions;
29 uint64_t reports;
30
31 struct {
32 uint64_t count;
33 uint64_t ticks;
34 uint64_t conflicts;
36
37 struct {
38 struct {
39 uint64_t eliminate;
40 uint64_t subsume;
42 uint64_t conflicts;
43 } eliminate;
44
45 struct {
46 uint64_t marked;
48
49 struct {
50 uint64_t conflicts;
52
53 struct {
54 uint64_t conflicts;
55 uint64_t interval;
57};
58
59struct limited {
62};
63
64struct enabled {
66 bool focus;
67 bool mode;
68 bool probe;
69};
70
71struct delay {
72 unsigned count;
73 unsigned current;
74};
75
82
83struct remember {
84 struct {
85 uint64_t eliminate;
86 uint64_t probe;
88 struct {
89 uint64_t reduce;
91};
92
93struct kissat;
94
96
97bool kissat_changed (changes before, changes after);
98
99void kissat_init_limits (struct kissat *);
100
101uint64_t kissat_scale_delta (struct kissat *, const char *, uint64_t);
102
103double kissat_nlogpown (uint64_t, unsigned);
104double kissat_sqrt (uint64_t);
105double kissat_logn (uint64_t);
106
107#define LOGN(COUNT) kissat_logn (COUNT)
108#define LINEAR(COUNT) (COUNT)
109#define NLOGN(COUNT) kissat_nlogpown (COUNT, 1)
110#define NLOG2N(COUNT) kissat_nlogpown (COUNT, 2)
111#define NLOG3N(COUNT) kissat_nlogpown (COUNT, 3)
112
113#define SQRT(COUNT) kissat_sqrt (COUNT)
114
115#define UPDATE_CONFLICT_LIMIT(NAME, COUNT, SCALE_COUNT_FUNCTION, \
116 SCALE_DELTA) \
117 do { \
118 if (solver->inconsistent) \
119 break; \
120 const struct statistics *statistics = &solver->statistics_; \
121 KISSAT_assert (statistics->COUNT > 0); \
122 struct limits *limits = &solver->limits; \
123 uint64_t DELTA = GET_OPTION (NAME##int); \
124 const double SCALING = SCALE_COUNT_FUNCTION (statistics->COUNT); \
125 KISSAT_assert (SCALING >= 1); \
126 DELTA *= SCALING; \
127 const uint64_t SCALED = \
128 !(SCALE_DELTA) ? DELTA \
129 : kissat_scale_delta (solver, #NAME, DELTA); \
130 limits->NAME.conflicts = CONFLICTS + SCALED; \
131 kissat_phase ( \
132 solver, #NAME, GET (COUNT), "new limit of %s after %s conflicts", \
133 FORMAT_COUNT (limits->NAME.conflicts), FORMAT_COUNT (SCALED)); \
134 } while (0)
135
136#include <inttypes.h>
137
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)
174
175struct kissat;
176
177bool kissat_delaying (struct kissat *, delay *);
178void kissat_bump_delay (struct kissat *, delay *);
179void kissat_reduce_delay (struct kissat *, delay *);
180
181#define DELAYING(NAME) kissat_delaying (solver, &solver->delays.NAME)
182
183#define BUMP_DELAY(NAME) kissat_bump_delay (solver, &solver->delays.NAME)
184
185#define REDUCE_DELAY(NAME) \
186 kissat_reduce_delay (solver, &solver->delays.NAME)
187
189
190#endif
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
pcover reduce()
double kissat_nlogpown(uint64_t, unsigned)
Definition kimits.c:29
double kissat_sqrt(uint64_t)
Definition kimits.c:22
bool kissat_changed(changes before, changes after)
bool kissat_delaying(struct kissat *, delay *)
Definition kimits.c:181
void kissat_reduce_delay(struct kissat *, delay *)
Definition kimits.c:157
double kissat_logn(uint64_t)
Definition kimits.c:15
void kissat_init_limits(struct kissat *)
Definition kimits.c:101
void kissat_bump_delay(struct kissat *, delay *)
Definition kimits.c:170
uint64_t kissat_scale_delta(struct kissat *, const char *, uint64_t)
Definition kimits.c:41
struct changes changes
Definition kimits.h:11
changes kissat_changes(struct kissat *)
unsigned additional_clauses
Definition kimits.h:22
uint64_t max_bound_completed
Definition kimits.h:21
Definition kimits.h:71
unsigned current
Definition kimits.h:73
unsigned count
Definition kimits.h:72
delay bumpreasons
Definition kimits.h:77
delay vivifyirr
Definition kimits.h:80
delay congruence
Definition kimits.h:78
delay sweep
Definition kimits.h:79
bool eliminate
Definition kimits.h:65
bool probe
Definition kimits.h:68
bool mode
Definition kimits.h:67
bool focus
Definition kimits.h:66
bool decisions
Definition kimits.h:61
bool conflicts
Definition kimits.h:60
uint64_t interval
Definition kimits.h:55
uint64_t reports
Definition kimits.h:29
struct limits::@317277023072347355124305102271146250361353123031 reorder
struct limits::@336173321371005365235017277110361226275162111066 factor
uint64_t decisions
Definition kimits.h:28
uint64_t eliminate
Definition kimits.h:39
uint64_t count
Definition kimits.h:32
uint64_t ticks
Definition kimits.h:33
struct limits::@317277023072347355124305102271146250361353123031 rephase
struct limits::@271324207010226176325073032231173072040043014112::@231176167003026031007234272206131127217014330205 variables
struct limits::@150155370044277342257066124252327376226075374113 glue
struct limits::@317277023072347355124305102271146250361353123031 restart
uint64_t conflicts
Definition kimits.h:27
struct limits::@317277023072347355124305102271146250361353123031 randec
uint64_t marked
Definition kimits.h:46
uint64_t subsume
Definition kimits.h:40
Definition mode.h:11
uint64_t eliminate
Definition kimits.h:85
struct remember::@203010231015261151103375260002344013164314222322 conflicts
uint64_t reduce
Definition kimits.h:89
struct remember::@232377244237173041170307101001235325057336237333 ticks
uint64_t probe
Definition kimits.h:86