Skip to content

dd_reorder(f,π): (Explicit) Variable (Re)Ordering #407

Description

@ssoelvsten

Currently, Adiar only uses the identity variable ordering, i.e. where xi has level i and so on. We would like to support different variable orderings.

  • Rename label to level

    To this end, we want the BDD representation to only thinks about levels; these levels are then mapped back to the user's variables elsewhere. Hence, we should replace the variable label with the name level where appropriate:

    • ptr / uid
    • node
    • request
    • ...?
  • Add variable ordering file

    Then, the BDD's level file or even better a separate shared variable ordering file will translate these back to actual variables.

  • Resolve mismatching orders in bdd_apply and other multi-BDD operations

    Having each BDD own its own ordering opens up some interesting opportunities. Yet, it also can create a headache. For example, what should happen if bdd_and(f,g) is called with an f and g with mismatching orderings? Here are the following strategies, which should be available for the end user via the exec_policy.

    • Throw an exception. [default]
    • Reorder one into the other (based on some heuristic?) [optional]
    • Reorder both into some compromise (based on some heuristic?) [optional]
  • Add dd_reorder(f,π)

    At this point, we can finally add dd_reorder which is a shallow wrapper around dd_replace. The main difference from dd_replace is that it not only affects the levels but also changes the associated variable ordering.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions