Multi-variable Quantification of BDDs in External Memory using Nested Sweeping (Extended Paper)
Previous research on the Adiar BDD package has been successful at designing algorithms capable of handling large Binary Decision Diagrams (BDDs) stored in external memory. To do so, it uses consecutive sweeps through the BDDs to resolve computations. Yet, this approach has kept algorithms for multi-variable quantification, the relational product, and variable reordering out of its scope. In this work, we address this by introducing the nested sweeping framework. Here, multiple concurrent sweeps pass information between eachother to compute the result. We have implemented the framework in Adiar and used it to create a new external memory multi-variable quantification algorithm. Compared to conventional depth-first implementations, Adiar with nested sweeping is able to solve more instances of our benchmarks and/or solve them faster.
💡 Research Summary
The paper introduces a novel “nested sweeping” framework that extends the external‑memory BDD package Adiar to support complex operations such as multi‑variable existential/universal quantification and relational product, which were previously unavailable. Traditional BDD tools rely on recursive depth‑first algorithms and hash tables, leading to random I/O that becomes a bottleneck when data exceeds RAM. Adiar replaces recursion with iterative, priority‑queue‑driven sweeps (Apply and Reduce) that are optimal in the Aggarwal‑Vitter I/O model, but these sweeps only handle operations without data‑dependent recursion.
To overcome this limitation, the authors design a four‑phase pipeline: outer Apply, outer Reduce, inner Apply, and inner Reduce. The outer Apply transposes the input BDDs into a level‑sorted arc file; the outer Reduce processes this file bottom‑up, using a priority queue (Q_outer↑) to propagate reduced nodes to their parents. When the current level coincides with a variable that must be quantified (the highest remaining variable in the set X), arcs targeting reduced nodes at that level are diverted into a second request queue (Q_inner↓). The inner Apply then performs an OR (for existential quantification) on the low/high child pairs requested, while the inner Reduce feeds the results back into the outer Reduce. This nesting allows the algorithm to interleave quantification with reduction without materialising the full intermediate BDD, thereby keeping I/O volume close to the theoretical lower bound.
Key technical contributions include: (1) a formal description of the request handling cases (Case 1, Case 2a, Case 2b) that guarantee correctness while minimizing I/O; (2) analysis of levelised cuts to bound the size of priority queues by the maximum cut of the input, ensuring that memory usage stays within RAM limits; (3) optimisations such as partial quantification during the outer Apply and loading narrow levels entirely into memory to replace one of the priority queues with random access, further reducing I/O overhead.
The implementation was integrated into Adiar and evaluated on benchmarks derived from QBF encodings of two‑player games and the transition relation of Conway’s Game of Life. Compared with conventional depth‑first BDD packages, the nested‑sweeping version solved more instances and achieved an average speed‑up of 1.7× on those it could solve. Importantly, the approach scales to BDDs that far exceed main‑memory capacity, demonstrating that external‑memory BDD manipulation can be extended to the more demanding operations required in symbolic model checking, QBF solving, and game‑theoretic analysis.
The paper concludes by outlining future work: extending nested sweeping to variable reordering, supporting dynamic variable ordering, and exploring distributed external‑memory settings to further broaden the applicability of I/O‑efficient BDD algorithms.
Comments & Academic Discussion
Loading comments...
Leave a Comment