Skip to content
Augists edited this page Apr 23, 2026 · 4 revisions

MTPNDD Wiki

Multi-Terminal Parallel Network Decision Diagrams — a C library for parallel NDD operations built on top of Sylvan (BDD) and Lace (work-stealing scheduler), with a Java API via JNI.

These pages expand on the top-level README.md in the repo. For build commands and architecture outline the README is also a good entry point.

Contents

  • Building and Running — clone + submodule init, CMake build, test/benchmark binaries, PGO + LTO build, bench_sweep.sh
  • JNI and Java API — Maven build, library path discovery, MTPNDDEngine / MTPNDD / MTPNDDConfig walkthrough
  • Configuration Reference — every field in mtpndd_pal_config_t / MTPNDDConfig.Builder, defaults, tuning notes
  • Visualizationmtpndd_print_dot / mtpndd_fprint_dot, rendering with Graphviz
  • Architecture — layer stack, per-module responsibilities, field system, GC model, Lace 1.6 context rules
  • Performance — nqueens sweep on feature/c (2026-04-22, Release + PGO, scaling tables) plus the 2026-04-24 SRE sweep comparing feature/go v1.18 vs. feature/c

Status (2026-04-24)

  • Two parallel implementations of the same public JNI surface:
    • feature/c — the original C + Sylvan + Lace reference. Sylvan submodule at sylvan/ on branch feature/mtpndd-perworker-refs (forked from trolando/sylvan 1.10.0 with per-worker mtbdd_refs sharding + sylvan_set_spawn_depth_cutoff); Lace 1.6.x fetched by Sylvan's CMake build. libmtpnddjni.so ≈ 454 KB.
    • feature/go — pure-Go port (no Sylvan, no Lace; goroutine-based parallelism). Produces a drop-in libmtpnddjni.so via cgo -buildmode=c-shared. ≈ 2.8 MB. Current tag: v1.18.
  • Pre-migration C layout preserved at the legacy-vendored-sylvan tag
  • Every performance number on this wiki is annotated with the branch (feature/c / feature/go) it came from — the two .so files are not interchangeable for benchmarking

Clone this wiki locally