Parallel Conflict-Driven Clause Learning (CDCL) SAT Solver
Team Members: Alan Joseph (alanjose), Om Arora (oarora)
Course: 15-418 - Parallel Computer Architecture and Programming, Spring 2026
Project URL: https://alanj268.github.io/parallel-SAT-CDCL
Summary
We will build a high-performance parallel SAT solver by parallelizing key components of the Conflict-Driven Clause Learning (CDCL) algorithm: portfolio-style search and inter-worker learned clause sharing. The implementation targets multi-core CPUs on GHC lab machines using C++ and OpenMP, with additional scaling experiments on PSC/Bridges-2 if time permits. Our goal is to quantify how much parallel search plus selective clause exchange can improve throughput and time-to-solution over a strong sequential CDCL baseline.
Background
Application Context
SAT asks whether a propositional formula in CNF has a satisfying truth assignment. Although SAT is NP-complete in the worst case, modern CDCL solvers are central to hardware/software verification, AI planning, and combinatorial optimization because they exploit structure in real-world instances.
CDCL Core Loop
CDCL alternates between decisions, Boolean Constraint Propagation (BCP), conflict analysis, clause learning, and non-chronological backjumping. BCP dominates runtime and uses watched literals to efficiently detect unit clauses. Conflict analysis generates high-value learned clauses (typically via a 1-UIP cut) that prune future search.
function CDCL(phi):
propagate() // level-0 unit propagation
if conflict: return UNSAT
while not all variables assigned:
(x, v) <- decide()
while True:
conflict_clause <- propagate()
if no conflict: break
if decision_level == 0: return UNSAT
(learned, bt_level) <- analyze(conflict_clause) // 1-UIP
add_clause(phi, learned)
backjump(bt_level)
assert(learned)
return SAT, assignment
Why Parallelism Helps
In a portfolio solver, multiple workers run independent CDCL searches with different random seeds and heuristic tie-breaking. Since workers encounter different conflicts, they learn different clauses; sharing high-quality clauses can prune each other's search spaces and reduce overall solve time.
The Challenge
Workload Characteristics
- Dependencies: each worker has sequential dependencies within its own trail/implication graph, while workers are loosely coupled via clause sharing.
- Memory behavior: watched-literal propagation is pointer-heavy and irregular, often memory-bandwidth and cache-locality limited.
- Communication/computation trade-off: too much clause sharing increases synchronization and integration cost; too little loses pruning benefits.
- Divergence: workers progress at very different rates due to non-deterministic branching, restarts, and conflict patterns.
System Constraints and Learning Goals
- Thread-safe clause integration without serializing the hot BCP path.
- Designing robust quality filters (LBD, clause length, recency/activity) for shared clauses.
- Balancing lock contention, queue overhead, and cache effects in shared-memory execution.
- Ensuring correctness under concurrency despite asynchronous clause arrival and local solver state evolution.
We aim to learn how algorithmic SAT heuristics interact with low-level parallel systems concerns (synchronization granularity, memory locality, and thread scheduling), and what design choices drive real speedup on irregular search workloads.
Resources
- Compute: GHC lab machines (8-core Intel shared-memory CPUs), and PSC/Bridges-2 for 16+ thread scaling studies.
- Code base: sequential CDCL baseline written from scratch in C++.
- Frameworks: OpenMP for threading; C++ atomics for concurrent queues and signaling.
- Benchmarks: SAT Competition CNF sets (random 3-SAT, industrial instances), plus SAT-encoded Sudoku cases.
- Tooling: Linux profiling tools (
perf,gprof) for bottleneck analysis.
References
- Eén, N. and Sörensson, N. (2003). "An Extensible SAT Solver." SAT 2003, LNCS 2919.
- Audemard, G. and Simon, L. (2009). "Predicting Learnt Clauses Quality in Modern SAT Solvers." IJCAI 2009.
- Hamadi, Y., Jabbour, S., and Sais, L. (2009). "ManySAT: a Parallel SAT Solver." JSAT, 6(4).
Goals and Deliverables
Plan to Achieve (Core Success Criteria)
- Correct sequential CDCL solver with watched literals, 1-UIP analysis, VSIDS, clause deletion, and restart policy.
- OpenMP portfolio solver with
pworkers and robust SAT/UNSAT termination protocol. - Thread-safe clause-sharing channel and worker-side import/export integration.
- Quality filtering (initially LBD threshold
l, tuned experimentally). - Performance evaluation at 1/2/4/8 threads on GHC, targeting roughly 4x–6x speedup on hard instances versus sequential baseline.
- Correctness validation: SAT solutions checked by independent verifier; UNSAT cross-checked against sequential baseline.
Hope to Achieve (Stretch)
- Scaling studies on PSC/Bridges-2 (16/32/64 threads).
- Adaptive sharing throttle based on worker conflict rate and queue pressure.
- Comparative study of clause filtering strategies (LBD vs. length vs. activity).
- Optional UNSAT certificate generation if core milestones are complete early.
Fallback Goals (If Progress Is Slower)
If full shared-clause integration becomes unstable or too costly within the timeline, we will deliver a correct no-sharing parallel portfolio solver plus a rigorous analysis of where speedup is gained and where it is lost.
Deliverables
- Code repository with sequential and parallel implementations.
- Milestone report with preliminary correctness and speedup data.
- Final report with methods, experiments, and analysis.
- Poster and live demo including speedup and sensitivity plots.
Platform Choice
Multi-core CPUs with OpenMP are a strong fit for CDCL portfolio solving because workers can share learned clauses through low-latency shared memory rather than message serialization. This model mirrors successful industrial parallel SAT designs and allows rapid iteration on synchronization policies and memory layout. It also maps naturally from 8-core GHC hosts to higher-core-count PSC nodes for scalability analysis.
Schedule
- Milestone Report Due: Tuesday, April 14th, 11:59pm
- Final Report Due: Thursday, April 30th, 11:59pm
- Poster Session (15-418 groups): Friday, May 1st, 8:30–11:30am
Week 1 (Mar 25 – Mar 31): Sequential Core Infrastructure
- Both: repository setup, build/test conventions, benchmark harness skeleton.
- Om: DIMACS parser + clause/literal representation + watched-literal storage layout.
- Alan: BCP kernel + assignment trail + initial decision routine.
- Both: unit tests on handcrafted SAT/UNSAT inputs; debug trail consistency.
Week 2 (Apr 1 – Apr 7): Complete Sequential CDCL
- Om: 1-UIP conflict analysis + non-chronological backjumping.
- Alan: VSIDS heap + Luby restarts + integration into search loop.
- Om: learned-clause management and periodic deletion.
- Both: full benchmark correctness run and baseline performance capture.
Week 3 (Apr 8 – Apr 14): Parallel Framework + Milestone
- Om: encapsulate per-thread state in
SolverWorker. - Alan: OpenMP worker launch, randomization policy, SAT/UNSAT global termination.
- Om: lock-free/shared queue for learned clauses + export path.
- Alan: import path at restart boundaries with safe watcher initialization.
- Both: milestone writeup (correctness status, 1/2/4/8 thread preliminary scaling, updated risk plan).
Week 4 (Apr 15 – Apr 21): Optimization and Profiling
- Both: tune clause-sharing threshold
land export frequency on multiple benchmark families. - Alan: implement export-budget cap per restart and back-pressure handling.
- Om: profile runtime breakdown (BCP, analysis, sharing overhead) and identify cache/sync bottlenecks.
- Both: iterate on data structure/layout improvements.
Week 5 (Apr 22 – Apr 28): Full Evaluation + Poster Draft
- Both: complete GHC experiments at 1/2/4/8 threads across benchmark sets.
- Alan: run no-sharing vs. sharing ablation and quantify portfolio effect.
- Om: generate plots (speedup, time breakdown, sensitivity to
l/deletion rate). - Both: verify SAT assignments and UNSAT outcomes; draft poster and report figures/tables.
Week 6 (Apr 29 – May 1): Finalization and Submission
- Both: finalize report text and publish links/artifacts on project page.
- Om: submit final report PDF.
- Alan: submit source code package.
- Both: finalize/print poster and rehearse demo for May 1 session.