SSoelvsten / bdd-benchmark

Benchmarking Suite for BDD packages

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add more BDD packages

SSoelvsten opened this issue · comments

An extensive list can be found here: https://gist.github.com/genadyp/0f0ee62d43492b7fc155e98716e35124

C / C++

  • CUDD ( #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 ( #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.

  • 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.

    The source code is available here

  • Meddly

    This was requested from peer reviewers.

  • 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.

Rust

One can compile a Rust-to-C FFI which then can be reexposed in the adapter's interface.

  • lib-bdd ( #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 ( #110 )
    A modern, abstracted, and multi-core implementation of decision diagrams. This already provides BDDs and ZDDs with competitive performance to CUDD and Sylvan.

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.

  • BeeDeeDee
    A thread-safe BDD package
  • PJBDD
    A multi-threaded BDD package