Skip to content

Add more BDD packages #12

@ssoelvsten

Description

@ssoelvsten

The following is a non-exhaustive list of relevant BDD packages to be included. Please, add comments with others to be added to this list.

C / C++

  • Adiar (abd152e)
    An I/O-efficient implementation based on time-forward processing rather than depth-first recursion.
  • BuDDy (abd152e)
    A simple yet fast and high quality BDD package.
  • BiDDy
    A BDD package for academic usage that supports multiple variants of decision diagrams. From its README.md it looks quite simple to set up.
  • CUDD ( Add CUDD package to benchmarks #17 )
    A very efficient and the most used BDD package using depth-first recursion, a unique node table and a memoization table. It shows signs of being a long-living/old project, so getting it to run is not trivial, even when one tries to use the CMake enabled repositories here on GitHub.
  • CAL ( Add CAL to set of BDD packages #48 )
    A BDD package using breadth-first manipulation algorithms to make it able to deal with external memory, The algorithms still use a hash table for random-access to each layer. So, if a layer grows larger than the available memory (incl. the space needed for the FIFO queues) then it shows the same I/O issues as other packages.
  • HermesBDD
    A recent multi-core and multi-threaded implementation of BDDs with also a focus on usability, modularity, and code quality.
  • Meddly
    This was requested from peer reviewers.
  • MTBDD
    A BDD package with a fascinating design on its unique node table, mixing breadth-first and depth-first manipulation, and multi-core systems. It is missing some features though, such as satcount, restrict, and quantification. We can probably get around this by always returning -1 for satcount and rewriting all other operations into an ITE or Apply.
  • Sylvan (abd152e)
    A performant multi-threaded implementation of BDDs.

Rust

One can create a Rust-to-C FFI which can be set up with CMake using Corrosion.

  • LibBDD ( Integrate Biodivine/LibBDD #105 )
    A Rust implementation of BDDs, where each BDD owns its own memory. That is, it is a recursive BDD package without a unique node table. This provides quite an interesting "baseline".
  • OxiDD ( Add OxiDD #110 )
    A modern, abstracted, and multi-core implementation of decision diagrams. This already provides BDDs and ZDDs with competitive performance to CUDD and Sylvan.
  • Ruddy
    A rust implementation with a unique node table specifically designed with cache performance in mind.

Java

A C++ program can start a Java VM and call methods on its classes. This can be nicely hidden away in the adapter's interface.

  • JDD
    The Java-based BDD package that is often compared to as a baseline.
  • BeeDeeDee
    A thread-safe BDD package
  • PJBDD
    A multi-threaded BDD package

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed🔌 adapterNew or changes to existing BDD package

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions