Skip to content

Commit bc1070b

Browse files
committed
performance note
1 parent c4f1b47 commit bc1070b

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,40 @@ fact that the format is more or less universally supported amongst SAT solvers
134134
leads some SAT users to use this format, even though there is I/O and parsing
135135
overhead by comparison to using a logic library.
136136

137+
# Performance
138+
In applications, SAT problems normally have an exponential tail runtime
139+
distribution with a strong bias towards bigger problems populating the longer
140+
runtime part of the distribution. So in practice, a good rule of thumb is 1 in
141+
N problems will on average take longer than time alotted to solve it for a
142+
problem of a given size, and then one measures N experimentally. Very often,
143+
despite the NP nature of SAT, an application can be designed to use a SAT solver
144+
in a way that problems almost never take too long. Additionally, the hardest known
145+
hand-crafted problems for CDCL solvers which take significant time involve at least
146+
a few hundred variables. So if you're application has only a few hundred variables,
147+
you're probably not going to have any performance problems at all with any solver.
148+
149+
As in almost every solver, the core CDCL solver in Gini is the workhorse and is a
150+
good general purpose solver. Some specific applications do benefit from
151+
pre- or in-processing, and some some applications may not be useable with such
152+
techniques. Other solvers provide more and better pre- or in-processing than Gini
153+
and help is welcome in adding such solving techniques to Gini.
154+
155+
The core CDCL solver in Gini has been compared with that in MiniSAT and PicoSAT,
156+
two standard such solvers on randomly chosen SAT competition problems. In this
157+
evaluation, Gini out performed PicoSAT and was neck-in-neck with MiniSAT. The
158+
core CDCL solver in Gini also measures up to PicoSAT and MiniSAT in terms of
159+
"propagations per second", indicating the core routines are themselves competitive
160+
with these solvers, not only the heuristics. This level of performance has not to
161+
our knowledge been achieved by other sat solvers in Go, such as go-sat or gophersat.
162+
163+
While the above evaluation casts a fairly wide net over application domains and
164+
problem difficulty, the performance of sat solvers and underlying algorithms are
165+
fundamentally hard to predict in any rigorous way. So your experience may differ,
166+
but we are confident Gini's core solver is a well positioned alternative to standard
167+
high-performance CDCL solvers in C/C++. We encourage you to give it a try and welcome
168+
any comparisons.
169+
170+
137171
# Concurrency
138172
Gini is written in Go and uses several goroutines by default for garbage
139173
collection and system call scheduling. There is a "core" single-goroutine

0 commit comments

Comments
 (0)