adiar

An I/O-efficient implementation of (Binary) Decision Diagrams

https://github.com/ssoelvsten/adiar

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in README
  • Academic publication links
    Links to: ieee.org, acm.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.5%) to scientific vocabulary

Keywords

bdd binary-decision-diagrams external-memory zdd zero-suppressed-decision-diagrams
Last synced: 6 months ago · JSON representation ·

Repository

An I/O-efficient implementation of (Binary) Decision Diagrams

Basic Info
Statistics
  • Stars: 30
  • Watchers: 5
  • Forks: 14
  • Open Issues: 118
  • Releases: 19
Topics
bdd binary-decision-diagrams external-memory zdd zero-suppressed-decision-diagrams
Created almost 6 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing License Citation Authors

README.md

Adiar

MIT License   Documentation   test   test   test   codecov

Based on the work of Lars Arge [Arge96], Adiar¹ is a BDD package [Bryant86] that makes use of time-forward processing to improve the I/O complexity of BDD manipulation. This makes it able to achieve efficient manipulation of BDDs, even when they outgrow the memory limit of the given machine.

Running Time of Adiar and other BDD packages solving the N-Queens problem

Figure: Running time solving N Queens (lower is better).

This project has been developed at the Logic and Semantics group at Aarhus University.

Table of Contents

Documentation

The documentation is available on Github Pages. To compile it locally, you need CMake and Doxygen (see Dependencies and Usage).

Dependencies

The implementation is dependant on the following external libraries

Framework for implementation of I/O efficient algorithms. Among other things, it provides an implementation of files, streams, sorting algorithms and priotity queues. Both are much faster than the algorithms in the C++ standard library [Vengroff94, Mølhave12].

Unit testing framework that is both easy to read and write.

Templated and efficient implementation of fixed-precision numbers.

All of these are included within the repository as submodules. If you have not cloned the repository recursively, then run the following command

bash git submodule update --init --recursive

Other dependencies that we cannot provide as a submodule are shown below. The ticked dependencies are mandatory to have installed.

  • [x] CMake (3.21+) and a C++ compiler (C++17)

Adiar compiles with the GNU (10+), Clang (12+), and MSVC C++ compilers. We do not monitor compatibility with other compilers, so we cannot guarantee they will work out-of-the-box.

  • [x] Boost (1.74.0+)

Furthermore, TPIE has a dependency on the Boost Library.

  • [ ] Doxygen (1.8.0+)

The documentation is created with the Doxygen documentation generator.

  • [ ] DOT

As a visual aid, the internal representation of the Decision Diagrams can be output as .dot files. These can then be turned into a graphical representation by use of a number of tools, such as graphviz (2.40+).

  • [ ] LCOV

To analyse code coverage and to produce the reports, we use the LTP GCOV extension code coverage tool

To install all of the above, run the respective command below.

| Operating System | Shell command | |------------------|---------------------------------------------------------------------------| | Ubuntu 22+ | apt install cmake g++ libboost-all-dev doxygen graphviz lcov | | Fedora 36+ | dnf install cmake gcc-c++ boost-devel doxygen graphviz lcov | | Arch Linux | pacman -S --needed cmake gcc boost-libs doxygen graphviz lcov |

Usage

For how to use Adiar in your project, see the Getting Started page in the documentation.

Makefile Targets

The project is build with CMake, though for convenience I have simplified the CMake interactions to a single Makefile which works on a local machine.

The Makefile provides the following targets

| target | effect | |----------------|-------------------------------------------------------| | build | Build the source files | | docs | Build the documentation files | | clean | Remove all build files | | | | | test | Build and run all unit tests | | test/... | Build and run a subset of the unit tests | | | | | coverage | Build and run all unit tests and create lcov report | | | | | clang/format | Format all files in src/ and test/ |

Playground

To quickly get started running small pieces of code, we provide in src/playground.cpp a tiny program where all of the boiler-plate is taken care of. This can be useful for trying out a feature, creating a minimal example for a bug report, and to guide development of new features.

To build and run src/playground.cpp with <MiB> MiB of memory (default: 1024 MiB), just run the following make command. bash make playground M=<MiB>

Examples

The example/ folder contains larger examples for how to use Adiar. The README.md file in said folder contains a more in-depth description of each of the examples. For benchmarking Adiar against other BDD packages, see the BDD Benchmarking repository.

You can use make examples/<name> to compile and run them.

Contributions

Adiar is not yet feature complete. If you notice anything is missing, please open an issue.

Your contribution to the project is also very welcome! We list multiple “issues” where you can help - these tasks range from the smallest of tasks to entire student projects. Please get familiar with our Contribution Guidelines before you start to work on something.

License

The software and documentation files in this repository are provided under the MIT License.

Using Adiar will indirectly use TPIE underneath, which in turn is licensed under the LGPL v3 license. Hence, a binary of yours that is statically linked to Adiar will be affected by that license. That is, if you share that binary with others, then you will be obliged to make the source public. This can be resolved by using Adiar as a shared library or have it use an alternative to TPIE, such as STXXL.

Citing this project

If you use Adiar in some of your academic work, then please consider to cite one or more of the papers in docs/papers/cite.md.

References

  • [Arge96] Lars Arge. “The I/O-complexity of Ordered Binary-Decision Diagram Manipulation”. In: Efficient External-Memory Data Structures and Applications. (1996)

  • [Bryant86] Randal E. Bryant. “Graph-Based Algorithms for Boolean Function Manipulation”. In: IEEE Transactions on Computers. (1986)

  • [Mølhave12] Thomas Mølhave. “Using TPIE for Processing Massive Data Sets in C++”. (2012)

  • [Vengroff94] D.E. Vengroff. “A transparent parallel I/O environment”. In: In Proc. 1994 DAGS Symposium on Parallel Computation. pp. 117–134 (1994)

Footnotes

  1. adiar ⟨ portugese ⟩ ( verb ) : to defer, to postpone

Owner

  • Name: Steffan Sølvsten
  • Login: SSoelvsten
  • Kind: user
  • Location: Aarhus, Denmark
  • Company: Aarhus University

PhD student in the Logic and Semantics group at Aarhus University.

Citation (CITATION.cff)

cff-version: 1.2.0
message: >-
  If you use this software, please cite it as below together with the relevant
  paper(s).
title: Adiar
abstract: >-
  An I/O-efficient implementation of (Binary) Decision
  Diagrams
keywords:
  - Binary Decision Diagrams
  - Zero-suppressed Decision Diagrams
  - External Memory Algorithms
  - Time-forward Processing
type: software
license: MIT
url: 'https://ssoelvsten.github.io/adiar'
version: 2.1.0
authors:
  - given-names: Steffan Christ
    family-names: Sølvsten
    email: soelvsten@cs.au.dk
    affiliation: Aarhus University
    orcid: 'https://orcid.org/0000-0003-0963-6569'
  - given-names: Jaco
    name-particle: Van de
    family-names: Pol
    email: jaco@cs.au.dk
    affiliation: Aarhus University
    orcid: 'https://orcid.org/0000-0003-4305-0625'
  - given-names: Anna Blume
    family-names: Jakobsen
    affiliation: Aarhus University
  - given-names: Mathias Weller Berg
    family-names: Thomasen
    affiliation: Aarhus University
  - given-names: Casper Moldrup
    family-names: Rysgaard
    email: rysgaard@cs.au.dk
    affiliation: Aarhus University
  - given-names: Erik Funder
    family-names: Carstensen
    affiliation: Aarhus University
identifiers:
  - type: doi
    value: 10.5281/zenodo.4718218
    description: Zenodo Artifact

GitHub Events

Total
  • Issues event: 2
  • Watch event: 1
  • Delete event: 7
  • Issue comment event: 19
  • Push event: 30
  • Pull request event: 13
  • Create event: 5
Last Year
  • Issues event: 2
  • Watch event: 1
  • Delete event: 7
  • Issue comment event: 19
  • Push event: 30
  • Pull request event: 13
  • Create event: 5

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 3
  • Total pull requests: 12
  • Average time to close issues: N/A
  • Average time to close pull requests: about 9 hours
  • Total issue authors: 2
  • Total pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 3.58
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 6
Past Year
  • Issues: 3
  • Pull requests: 12
  • Average time to close issues: N/A
  • Average time to close pull requests: about 9 hours
  • Issue authors: 2
  • Pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 3.58
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 6
Top Authors
Issue Authors
  • SSoelvsten (31)
  • gimmelemons (1)
  • ssoelvsten (1)
Pull Request Authors
  • SSoelvsten (67)
  • dependabot[bot] (3)
  • nhusung (2)
  • ssoelvsten (2)
  • halvko (1)
  • Vimal-Shady (1)
Top Labels
Issue Labels
🎓 student programmer (14) ✨ feature (13) 📁 bdd (10) 🎓 student project (9) ✨ optimisation (7) 📁 internal (7) good first issue (5) 🔥 bug (4) 📁 zdd (3) 📁 statistics (3) ✨ code quality (2) 📁 build (1) 📁 docs (1) wontfix (1) 📁 test (1) ❕ deprecation (1)
Pull Request Labels
✨ optimisation (21) ✨ code quality (13) 🔥 bug (11) 📁 build (10) ✨ feature (10) 📁 bdd (10) 📁 internal (7) dependencies (3) github_actions (3) 🎓 student project (2) 📁 statistics (2) ❕ breaking (2) 📁 zdd (1) 📁 test (1) ❕ deprecation (1)

Dependencies

.github/workflows/benchmark.yml actions
  • actions/checkout v2 composite
  • fkirc/skip-duplicate-actions master composite
  • machine-learning-apps/pr-comment master composite
.github/workflows/cancel.yml actions
  • styfle/cancel-workflow-action 0.9.0 composite
.github/workflows/doxygen.yml actions
  • JamesIves/github-pages-deploy-action 4.1.4 composite
  • actions/checkout v2 composite
.github/workflows/examples.yml actions
  • actions/checkout v2 composite
  • fkirc/skip-duplicate-actions master composite
.github/workflows/static_analysis.yml actions
  • actions/checkout v2 composite
  • deep5050/cppcheck-action main composite
  • machine-learning-apps/pr-comment master composite
  • sbeyer/include-guards-check-action v1.0.0 composite
.github/workflows/system_test.yml actions
  • actions/checkout v2 composite
  • fkirc/skip-duplicate-actions master composite
.github/workflows/coverage.yml actions
  • actions/checkout v2 composite
  • fkirc/skip-duplicate-actions master composite
.github/workflows/linux.yml actions
  • actions/checkout v2 composite
  • fkirc/skip-duplicate-actions master composite
.github/workflows/mac.yml actions
  • actions/checkout v2 composite
  • fkirc/skip-duplicate-actions master composite
  • maxim-lobanov/setup-xcode v1 composite
.github/workflows/windows.yml actions
  • MarkusJx/install-boost v2.3.0 composite
  • actions/checkout v2 composite
  • fkirc/skip-duplicate-actions master composite
  • ilammy/msvc-dev-cmd v1.12.1 composite
  • ts-graphviz/setup-graphviz v1 composite
.github/workflows/citation.yml actions
  • actions/checkout v3 composite
  • dieghernan/cff-validator v3 composite