/Cloud-BDD

Distributed implementation of BDD package

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

This directory contains files for constructing a distributed BDD
package.  It also can be used as a command interpreter for the CUDD
BDD package.  It has been updated to work with Chained BDDs, as
described in the paper:

``Chain reduction for binary and zero-suppressed decision diagrams,''
TACAS, 2018.

The only external code used is for the CUDD BDD package

All code is in C, using Unix sockets as the communication mechanism.

Installation:

1. Install the modified CUDD package
   https://github.com/rebryant/Chain-CUDD-3.0.0.  Follow the
   instructions in the file ``RELEASE.NOTES''.

2. Add a symbolic link "cudd-symlink" to the directory pointing to the
   directory where Chain-CUDD-3.0.0 has been installed.

3. Type "make" to install a the command-line interpreter "runbdd."
   Type "make b" to generate the programs needed to support
   distributed execution.

Use:

The runbdd provides a simple command-line interface for evaluating
Boolean functions.  Start the program and type "help" for a list of
commands.  Use the Makefile in the scripts subdirectory to generate
some sample command sequences.

Files:

agent.{c,h}:
    Support worker and client agents executing dynamic data-flow

bdd.{c,h}:
    BDD implementation based on "refs".  Support for both single-process
    execution, as well as for data-flow based distributed execution

bworker.c:
    Worker agent for BDD execution

chunk.{c,h}:
chunk_test.c
    Data structure for dynamically allocated, variable-length arrays
    Underlying data structure for most data blocks, and for data-flow messages

console.{c,h}:
console_test.c
    Support for command-line interfaces, used by both controller and
    clients.

dtype.h:
    Declarations of widely used data types

msg.{c,h}:
    Support for messages and routing in data-flow execution model

report.{c,h}:
    Utilities for reporting events at different levels of verbosity
    and for allocating/freeing memory in trackable way

router.c:
    Router to support communication between data-flow agents

runbdd.c:
    Can run as standalone BDD manipulator, as well as client for
    distributed execution.  Supports evaluation by CUDD, by
    single-processor, and by distributed implementation

shadow.{c,h}:
shadow_test.c
    Common API to Boolean manipulation primitives, allowing any
    combination of evaluation methods, and checking consistency among them.

table.{c,h}:
chunktable_test.c
set_test.c
    Support for dictionaries and sets

tclient.c
tworker.c:
test_df.{h,c}
    Testing framework for data-flow execution