cadical 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +26 -0
- data/README.md +101 -0
- data/ext/cadical/cadical/LICENSE +28 -0
- data/ext/cadical/cadical/README.md +65 -0
- data/ext/cadical/cadical/VERSION +1 -0
- data/ext/cadical/cadical/src/analyze.cpp +1360 -0
- data/ext/cadical/cadical/src/arena.cpp +30 -0
- data/ext/cadical/cadical/src/arena.hpp +105 -0
- data/ext/cadical/cadical/src/assume.cpp +616 -0
- data/ext/cadical/cadical/src/averages.cpp +34 -0
- data/ext/cadical/cadical/src/averages.hpp +37 -0
- data/ext/cadical/cadical/src/backbone.cpp +631 -0
- data/ext/cadical/cadical/src/backtrack.cpp +177 -0
- data/ext/cadical/cadical/src/backward.cpp +231 -0
- data/ext/cadical/cadical/src/bins.cpp +22 -0
- data/ext/cadical/cadical/src/bins.hpp +22 -0
- data/ext/cadical/cadical/src/block.cpp +824 -0
- data/ext/cadical/cadical/src/block.hpp +37 -0
- data/ext/cadical/cadical/src/cadical.cpp +1026 -0
- data/ext/cadical/cadical/src/cadical.hpp +1419 -0
- data/ext/cadical/cadical/src/ccadical.cpp +208 -0
- data/ext/cadical/cadical/src/ccadical.h +74 -0
- data/ext/cadical/cadical/src/checker.cpp +649 -0
- data/ext/cadical/cadical/src/checker.hpp +173 -0
- data/ext/cadical/cadical/src/clause.cpp +689 -0
- data/ext/cadical/cadical/src/clause.hpp +190 -0
- data/ext/cadical/cadical/src/collect.cpp +545 -0
- data/ext/cadical/cadical/src/compact.cpp +550 -0
- data/ext/cadical/cadical/src/condition.cpp +940 -0
- data/ext/cadical/cadical/src/config.cpp +101 -0
- data/ext/cadical/cadical/src/config.hpp +20 -0
- data/ext/cadical/cadical/src/congruence.cpp +7880 -0
- data/ext/cadical/cadical/src/congruence.hpp +757 -0
- data/ext/cadical/cadical/src/constrain.cpp +64 -0
- data/ext/cadical/cadical/src/contract.cpp +27 -0
- data/ext/cadical/cadical/src/contract.hpp +139 -0
- data/ext/cadical/cadical/src/cover.cpp +704 -0
- data/ext/cadical/cadical/src/cover.hpp +34 -0
- data/ext/cadical/cadical/src/decide.cpp +347 -0
- data/ext/cadical/cadical/src/decompose.cpp +738 -0
- data/ext/cadical/cadical/src/decompose.hpp +23 -0
- data/ext/cadical/cadical/src/deduplicate.cpp +275 -0
- data/ext/cadical/cadical/src/definition.cpp +283 -0
- data/ext/cadical/cadical/src/delay.hpp +38 -0
- data/ext/cadical/cadical/src/drattracer.cpp +153 -0
- data/ext/cadical/cadical/src/drattracer.hpp +55 -0
- data/ext/cadical/cadical/src/elim.cpp +1171 -0
- data/ext/cadical/cadical/src/elim.hpp +53 -0
- data/ext/cadical/cadical/src/elimfast.cpp +570 -0
- data/ext/cadical/cadical/src/ema.cpp +95 -0
- data/ext/cadical/cadical/src/ema.hpp +68 -0
- data/ext/cadical/cadical/src/extend.cpp +289 -0
- data/ext/cadical/cadical/src/external.cpp +1034 -0
- data/ext/cadical/cadical/src/external.hpp +487 -0
- data/ext/cadical/cadical/src/external_propagate.cpp +1316 -0
- data/ext/cadical/cadical/src/factor.cpp +1011 -0
- data/ext/cadical/cadical/src/factor.hpp +54 -0
- data/ext/cadical/cadical/src/file.cpp +506 -0
- data/ext/cadical/cadical/src/file.hpp +210 -0
- data/ext/cadical/cadical/src/flags.cpp +135 -0
- data/ext/cadical/cadical/src/flags.hpp +93 -0
- data/ext/cadical/cadical/src/flip.cpp +269 -0
- data/ext/cadical/cadical/src/format.cpp +89 -0
- data/ext/cadical/cadical/src/format.hpp +36 -0
- data/ext/cadical/cadical/src/frattracer.cpp +277 -0
- data/ext/cadical/cadical/src/frattracer.hpp +67 -0
- data/ext/cadical/cadical/src/gates.cpp +766 -0
- data/ext/cadical/cadical/src/heap.hpp +212 -0
- data/ext/cadical/cadical/src/idruptracer.cpp +566 -0
- data/ext/cadical/cadical/src/idruptracer.hpp +112 -0
- data/ext/cadical/cadical/src/instantiate.cpp +365 -0
- data/ext/cadical/cadical/src/instantiate.hpp +45 -0
- data/ext/cadical/cadical/src/internal.cpp +1265 -0
- data/ext/cadical/cadical/src/internal.hpp +1941 -0
- data/ext/cadical/cadical/src/inttypes.hpp +34 -0
- data/ext/cadical/cadical/src/ipasir.cpp +47 -0
- data/ext/cadical/cadical/src/ipasir.h +37 -0
- data/ext/cadical/cadical/src/kitten.c +2599 -0
- data/ext/cadical/cadical/src/kitten.h +97 -0
- data/ext/cadical/cadical/src/level.hpp +33 -0
- data/ext/cadical/cadical/src/lidruptracer.cpp +657 -0
- data/ext/cadical/cadical/src/lidruptracer.hpp +122 -0
- data/ext/cadical/cadical/src/limit.cpp +146 -0
- data/ext/cadical/cadical/src/limit.hpp +168 -0
- data/ext/cadical/cadical/src/logging.cpp +214 -0
- data/ext/cadical/cadical/src/logging.hpp +98 -0
- data/ext/cadical/cadical/src/lookahead.cpp +520 -0
- data/ext/cadical/cadical/src/lratchecker.cpp +833 -0
- data/ext/cadical/cadical/src/lratchecker.hpp +168 -0
- data/ext/cadical/cadical/src/lrattracer.cpp +200 -0
- data/ext/cadical/cadical/src/lrattracer.hpp +61 -0
- data/ext/cadical/cadical/src/lucky.cpp +506 -0
- data/ext/cadical/cadical/src/message.cpp +218 -0
- data/ext/cadical/cadical/src/message.hpp +65 -0
- data/ext/cadical/cadical/src/minimize.cpp +224 -0
- data/ext/cadical/cadical/src/mobical.cpp +5588 -0
- data/ext/cadical/cadical/src/occs.cpp +52 -0
- data/ext/cadical/cadical/src/occs.hpp +36 -0
- data/ext/cadical/cadical/src/options.cpp +359 -0
- data/ext/cadical/cadical/src/options.hpp +442 -0
- data/ext/cadical/cadical/src/parse.cpp +471 -0
- data/ext/cadical/cadical/src/parse.hpp +75 -0
- data/ext/cadical/cadical/src/phases.cpp +56 -0
- data/ext/cadical/cadical/src/phases.hpp +19 -0
- data/ext/cadical/cadical/src/probe.cpp +990 -0
- data/ext/cadical/cadical/src/profile.cpp +107 -0
- data/ext/cadical/cadical/src/profile.hpp +283 -0
- data/ext/cadical/cadical/src/proof.cpp +691 -0
- data/ext/cadical/cadical/src/proof.hpp +125 -0
- data/ext/cadical/cadical/src/propagate.cpp +584 -0
- data/ext/cadical/cadical/src/queue.cpp +90 -0
- data/ext/cadical/cadical/src/queue.hpp +74 -0
- data/ext/cadical/cadical/src/radix.hpp +180 -0
- data/ext/cadical/cadical/src/random.cpp +207 -0
- data/ext/cadical/cadical/src/random.h +44 -0
- data/ext/cadical/cadical/src/random.hpp +98 -0
- data/ext/cadical/cadical/src/range.hpp +125 -0
- data/ext/cadical/cadical/src/reap.cpp +127 -0
- data/ext/cadical/cadical/src/reap.hpp +28 -0
- data/ext/cadical/cadical/src/reduce.cpp +278 -0
- data/ext/cadical/cadical/src/reluctant.hpp +82 -0
- data/ext/cadical/cadical/src/rephase.cpp +402 -0
- data/ext/cadical/cadical/src/report.cpp +313 -0
- data/ext/cadical/cadical/src/resources.cpp +160 -0
- data/ext/cadical/cadical/src/resources.hpp +16 -0
- data/ext/cadical/cadical/src/restart.cpp +178 -0
- data/ext/cadical/cadical/src/restore.cpp +267 -0
- data/ext/cadical/cadical/src/score.cpp +51 -0
- data/ext/cadical/cadical/src/score.hpp +16 -0
- data/ext/cadical/cadical/src/shrink.cpp +507 -0
- data/ext/cadical/cadical/src/signal.cpp +136 -0
- data/ext/cadical/cadical/src/signal.hpp +33 -0
- data/ext/cadical/cadical/src/solution.cpp +50 -0
- data/ext/cadical/cadical/src/solver.cpp +1871 -0
- data/ext/cadical/cadical/src/stable.cpp +31 -0
- data/ext/cadical/cadical/src/stack.h +110 -0
- data/ext/cadical/cadical/src/stats.cpp +920 -0
- data/ext/cadical/cadical/src/stats.hpp +418 -0
- data/ext/cadical/cadical/src/subsume.cpp +645 -0
- data/ext/cadical/cadical/src/sweep.cpp +1960 -0
- data/ext/cadical/cadical/src/sweep.hpp +61 -0
- data/ext/cadical/cadical/src/terminal.cpp +38 -0
- data/ext/cadical/cadical/src/terminal.hpp +96 -0
- data/ext/cadical/cadical/src/ternary.cpp +450 -0
- data/ext/cadical/cadical/src/testing.hpp +24 -0
- data/ext/cadical/cadical/src/tier.cpp +189 -0
- data/ext/cadical/cadical/src/tracer.hpp +186 -0
- data/ext/cadical/cadical/src/transred.cpp +253 -0
- data/ext/cadical/cadical/src/unstable.cpp +29 -0
- data/ext/cadical/cadical/src/util.cpp +129 -0
- data/ext/cadical/cadical/src/util.hpp +181 -0
- data/ext/cadical/cadical/src/var.cpp +39 -0
- data/ext/cadical/cadical/src/var.hpp +22 -0
- data/ext/cadical/cadical/src/veripbtracer.cpp +427 -0
- data/ext/cadical/cadical/src/veripbtracer.hpp +106 -0
- data/ext/cadical/cadical/src/version.cpp +107 -0
- data/ext/cadical/cadical/src/version.hpp +13 -0
- data/ext/cadical/cadical/src/vivify.cpp +1893 -0
- data/ext/cadical/cadical/src/vivify.hpp +50 -0
- data/ext/cadical/cadical/src/walk.cpp +1088 -0
- data/ext/cadical/cadical/src/walk.hpp +91 -0
- data/ext/cadical/cadical/src/walk_full_occs.cpp +966 -0
- data/ext/cadical/cadical/src/warmup.cpp +403 -0
- data/ext/cadical/cadical/src/watch.cpp +126 -0
- data/ext/cadical/cadical/src/watch.hpp +77 -0
- data/ext/cadical/cadical_ext.c +778 -0
- data/ext/cadical/extconf.rb +26 -0
- data/lib/cadical/version.rb +3 -0
- data/lib/cadical.rb +12 -0
- metadata +218 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#include "internal.hpp"
|
|
2
|
+
|
|
3
|
+
namespace CaDiCaL {
|
|
4
|
+
|
|
5
|
+
Arena::Arena (Internal *i) {
|
|
6
|
+
memset ((void *) this, 0, sizeof *this);
|
|
7
|
+
internal = i;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Arena::~Arena () {
|
|
11
|
+
delete[] from.start;
|
|
12
|
+
delete[] to.start;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
void Arena::prepare (size_t bytes) {
|
|
16
|
+
LOG ("preparing 'to' space of arena with %zd bytes", bytes);
|
|
17
|
+
assert (!to.start);
|
|
18
|
+
to.top = to.start = new char[bytes];
|
|
19
|
+
to.end = to.start + bytes;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void Arena::swap () {
|
|
23
|
+
delete[] from.start;
|
|
24
|
+
LOG ("delete 'from' space of arena with %zd bytes",
|
|
25
|
+
(size_t) (from.end - from.start));
|
|
26
|
+
from = to;
|
|
27
|
+
to.start = to.top = to.end = 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
} // namespace CaDiCaL
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#ifndef _arena_hpp_INCLUDED
|
|
2
|
+
#define _arena_hpp_INCLUDED
|
|
3
|
+
|
|
4
|
+
namespace CaDiCaL {
|
|
5
|
+
|
|
6
|
+
// This memory allocation arena provides fixed size pre-allocated memory for
|
|
7
|
+
// the moving garbage collector 'copy_non_garbage_clauses' in 'collect.cpp'
|
|
8
|
+
// to hold clauses which should survive garbage collection.
|
|
9
|
+
|
|
10
|
+
// The advantage of using a pre-allocated arena is that the allocation order
|
|
11
|
+
// of the clauses can be adapted in such a way that clauses watched by the
|
|
12
|
+
// same literal are allocated consecutively. This improves locality during
|
|
13
|
+
// propagation and thus is more cache friendly. A similar technique is
|
|
14
|
+
// implemented in MiniSAT and Glucose and gives substantial speed-up in
|
|
15
|
+
// propagations per second even though it might even almost double peek
|
|
16
|
+
// memory usage. Note that in MiniSAT this arena is actually required for
|
|
17
|
+
// MiniSAT to be able to use 32 bit clauses references instead of 64 bit
|
|
18
|
+
// pointers. This would restrict the maximum number of clauses and thus is
|
|
19
|
+
// a restriction we do not want to use anymore.
|
|
20
|
+
|
|
21
|
+
// New learned clauses are allocated in CaDiCaL outside of this arena and
|
|
22
|
+
// moved to the arena during garbage collection. The additional 'to' space
|
|
23
|
+
// required for such a moving garbage collector is only allocated for those
|
|
24
|
+
// clauses surviving garbage collection, which usually needs much less
|
|
25
|
+
// memory than all clauses. The net effect is that in our implementation
|
|
26
|
+
// the moving garbage collector using this arena only needs roughly 50% more
|
|
27
|
+
// memory than allocating the clauses directly. Both implementations can be
|
|
28
|
+
// compared by varying the 'opts.arenatype' option (which also controls the
|
|
29
|
+
// allocation order of clauses during moving them).
|
|
30
|
+
|
|
31
|
+
// The standard sequence of using the arena is as follows:
|
|
32
|
+
//
|
|
33
|
+
// Arena arena;
|
|
34
|
+
// ...
|
|
35
|
+
// arena.prepare (bytes);
|
|
36
|
+
// q1 = arena.copy (p1, bytes1);
|
|
37
|
+
// ...
|
|
38
|
+
// qn = arena.copy (pn, bytesn);
|
|
39
|
+
// assert (bytes1 + ... + bytesn <= bytes);
|
|
40
|
+
// arena.swap ();
|
|
41
|
+
// ...
|
|
42
|
+
// if (!arena.contains (q)) delete q;
|
|
43
|
+
// ...
|
|
44
|
+
// arena.prepare (bytes);
|
|
45
|
+
// q1 = arena.copy (p1, bytes1);
|
|
46
|
+
// ...
|
|
47
|
+
// qn = arena.copy (pn, bytesn);
|
|
48
|
+
// assert (bytes1 + ... + bytesn <= bytes);
|
|
49
|
+
// arena.swap ();
|
|
50
|
+
// ...
|
|
51
|
+
//
|
|
52
|
+
// One has to be really careful with 'qi' references to arena memory.
|
|
53
|
+
|
|
54
|
+
struct Internal;
|
|
55
|
+
|
|
56
|
+
class Arena {
|
|
57
|
+
|
|
58
|
+
Internal *internal;
|
|
59
|
+
|
|
60
|
+
struct {
|
|
61
|
+
char *start, *top, *end;
|
|
62
|
+
} from, to;
|
|
63
|
+
|
|
64
|
+
public:
|
|
65
|
+
Arena (Internal *);
|
|
66
|
+
~Arena ();
|
|
67
|
+
|
|
68
|
+
// Prepare 'to' space to hold that amount of memory. Precondition is that
|
|
69
|
+
// the 'to' space is empty. The following sequence of 'copy' operations
|
|
70
|
+
// can use as much memory in sum as pre-allocated here.
|
|
71
|
+
//
|
|
72
|
+
void prepare (size_t bytes);
|
|
73
|
+
|
|
74
|
+
// Does the memory pointed to by 'p' belong to this arena? More precisely
|
|
75
|
+
// to the 'from' space, since that is the only one remaining after 'swap'.
|
|
76
|
+
//
|
|
77
|
+
bool contains (void *p) const {
|
|
78
|
+
char *c = (char *) p;
|
|
79
|
+
return (from.start <= c && c < from.top) ||
|
|
80
|
+
(to.start <= c && c < to.top);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Allocate that amount of memory in 'to' space. This assumes the 'to'
|
|
84
|
+
// space has been prepared to hold enough memory with 'prepare'. Then
|
|
85
|
+
// copy the memory pointed to by 'p' of size 'bytes'. Note that it does
|
|
86
|
+
// not matter whether 'p' is in 'from' or allocated outside of the arena.
|
|
87
|
+
//
|
|
88
|
+
char *copy (const char *p, size_t bytes) {
|
|
89
|
+
char *res = to.top;
|
|
90
|
+
to.top += bytes;
|
|
91
|
+
assert (to.top <= to.end);
|
|
92
|
+
memcpy (res, p, bytes);
|
|
93
|
+
return res;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Completely delete 'from' space and then replace 'from' by 'to' (by
|
|
97
|
+
// pointer swapping). Everything previously allocated (in 'from') and not
|
|
98
|
+
// explicitly copied to 'to' with 'copy' becomes invalid.
|
|
99
|
+
//
|
|
100
|
+
void swap ();
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
} // namespace CaDiCaL
|
|
104
|
+
|
|
105
|
+
#endif
|