-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consider optimizing variable order to reduce BDD size #18
Comments
From the part of the DAG shown above, this looks like the classical variable-ordering problem with ROBDDs: the size of the BDD can depend heavily on whether one variable or the other comes first. In the worst case one can have exponential blowup if one chooses the wrong order. The efficient operations on BDDs depend on variables always existing in a certain order in any path from a root to a terminal; so unfortunately we can't arbitrarily reorder nodes in certain subsets of the DAG. However, we could choose a different variable order overall. Like most good things, the fun is spoiled here by the fact that doing so optimally is NP-hard, unfortunately... However, there's plenty of prior work on how to do this optimization; I'm happy to review code if someone wants to try to build a variable-order optimization framework! |
Well, I took a look at the paper on sifting and dynamic variable-order optimisation, but I think it runs into a design problem with |
Yes, that's a fundamental problem if you want to do things on the fly -- the data structure is immutable (which is what allows us to dedup); a |
Here's my example program:
If you look at the output dot, there's a lot of duplication of things like the
a_select
andb_select
muxes, much of which I would argue is unnecessary.From this snippet of the output, it seems to me that all the "b_inv is true" nodes can be merged and all the "b_inv is false" nodes can be merged. If you then recursively follow this upwards, this would remove a lot of redundancy.
The text was updated successfully, but these errors were encountered: