Advanced variable ordering configuration
The CIF data-based synthesis performance depends greatly on the variable ordering. After selecting an initial ordering, it can subsequently be improved by algorithms for automatic variable ordering. This may be configured using basic options, but they offer only limited flexibility. For the most flexibility, variable ordering can be configured using the BDD advanced variable ordering option (see the options section). Advanced ordering allows configuring which orderers, such as predefined orders and ordering algorithms, to use. It also allows configuring the order in which the various orderers are applied, as well as the settings to use for each orderer.
Variable ordering may be configured using either the basic options or using the advanced option. It is not supported to configure variable ordering using both basic and advanced configuration at the same time.
Examples
The predefined initial variable orderings can be expressed using the advanced syntax as follows:
Predefined initial ordering | Advanced syntax |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Some other examples of advanced variable orderings:
-
model -> dcsh -> force -> slidwin
: Start with model order as initial order, and then apply the DCSH, FORCE and sliding window algorithms with their default settings. -
sorted -> dcsh(relations=linearized)
: Start with sorted order as initial order, and then apply the DCSH algorithm with linearized variable relations. -
random -> or(choices=[dcsh,force])
: Start with a random order as initial order, and then apply the DCSH and FORCE algorithms, choosing the best order from the ones produced by the two algorithms. -
force -> reverse
: Start with the default initial model order, then apply the FORCE algorithm, and finally reverse the variable order.
Syntax
The syntax to specify advanced variable ordering generally works as follows:
-
Orderers are specified by their name.
-
Arguments to configure orderers may optionally be given after the name of the orderer between parentheses:
(...)
. -
It is allowed to provide empty parentheses, e.g.,
model()
is equivalent to specifyingmodel
. -
Each argument is given by a name and a value:
name=value
. -
To specify multiple arguments, separate them with a comma. After the last argument, optionally a comma may be specified as well.
-
To apply multiple algorithms in sequence, separate them with an arrow (
->
). -
If needed, a sequence of orderers may be enclosed in parentheses:
(... -> ... -> ...)
. -
Spaces, tabs, and newline characters are generally ignored, but can be used to improve readability.
Orderers
The following orderers can be specified:
-
Basic ordering
Uses the configuration as configured by the basic variable ordering options.
-
Name:
basic
-
Arguments: n/a
-
Example:
basic
-
-
Model order
Uses the predefined model order.
-
Name:
model
-
Arguments:
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
both
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
model
,model(effect=var-order)
-
-
Sorted order
Uses the predefined sorted order.
-
Name:
sorted
-
Arguments:
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
both
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
sorted
,sorted(effect=var-order)
-
-
Random order
Uses the predefined random order.
-
Name:
random
-
Arguments:
-
seed
-
Description: a seed for the random order
-
Mandatory: no
-
Default: use a random seed
-
Type: number
-
Constraints: seed must be in the range [0 .. 264 - 1]
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
both
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
random
,random(seed=123)
,random(seed=123, effect=var-order)
-
-
Custom order
Uses a custom order.
-
Name:
custom
-
Arguments:
-
order
-
Description: the custom order, with the same syntax as for the basic configuration option
-
Mandatory: yes
-
Default: n/a
-
Type: string
-
Constraints: the order must be complete in that it contains all variables, and must not contain any duplicate variables
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
both
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
custom(order="a,b;c,d")
,custom(order="a,b;c,d", effect=var-order)
-
-
DCSH
Applies the DCSH algorithm.
-
Name:
dcsh
-
Arguments:
-
node-finder
-
Description: the node finder algorithm to use for the Weighted-Cuthill-McKee orderer
-
Mandatory: no
-
Default:
george-liu
-
Type: enum (
george-liu
orsloan
) -
Constraints: none
-
-
metric
-
Description: the metric to use to compare orders
-
Mandatory: no
-
Default:
wes
-
Type: enum (
total-span
orwes
) -
Constraints: none
-
-
relations
-
Description: the kind of relations to use when computing metric values
-
Mandatory: no
-
Default:
configured
(per the BDD hyper-edge creation algorithm option) -
Type: enum (
configured
,legacy
orlinearized
) -
Constraints: none
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
var-order
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
dcsh
,dcsh(metric=wes)
,dcsh(node-finder=george-liu, metric=wes, relations=configured, effect=both)
-
-
FORCE
Applies the FORCE algorithm.
-
Name:
force
-
Arguments:
-
metric
-
Description: the metric to use to compare orders
-
Mandatory: no
-
Default:
total-span
-
Type: enum (
total-span
orwes
) -
Constraints: none
-
-
relations
-
Description: the kind of relations to use when computing metric values
-
Mandatory: no
-
Default:
configured
(per the BDD hyper-edge creation algorithm option) -
Type: enum (
configured
,legacy
orlinearized
) -
Constraints: none
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
var-order
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
force
,force(metric=total-span)
,force(metric=total-span, relations=configured, effect=both)
-
-
Sliding window
Applies the sliding window algorithm.
-
Name:
slidwin
-
Arguments:
-
size
-
Description: the maximum size of the window
-
Mandatory: no
-
Default: 4 (as configured by the BDD sliding window size option)
-
Type: number
-
Constraints: size must be in the range [1 .. 12]
-
-
metric
-
Description: the metric to use to compare orders
-
Mandatory: no
-
Default:
total-span
-
Type: enum (
total-span
orwes
) -
Constraints: none
-
-
relations
-
Description: the kind of relations to use when computing metric values
-
Mandatory: no
-
Default:
configured
(per the BDD hyper-edge creation algorithm option) -
Type: enum (
configured
,legacy
orlinearized
) -
Constraints: none
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
var-order
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
slidwin
,slidwin(size=5)
,slidwin(size=5, metric=total-span, relations=configured, effect=both)
-
-
Sloan
Applies the Sloan profile/wavefront-reducing algorithm.
-
Name:
sloan
-
Arguments:
-
relations
-
Description: the kind of relations to use when computing metric values
-
Mandatory: no
-
Default:
configured
(per the BDD hyper-edge creation algorithm option) -
Type: enum (
configured
,legacy
orlinearized
) -
Constraints: none
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
var-order
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
sloan
,sloan(relations=configured, effect=both)
-
-
Weighted Cuthill-McKee
Applies the Weighted Cuthill-McKee bandwidth-reducing algorithm.
-
Name:
weighted-cm
-
Arguments:
-
node-finder
-
Description: the node finder algorithm to use
-
Mandatory: no
-
Default:
george-liu
-
Type: enum (
george-liu
orsloan
) -
Constraints: none
-
-
relations
-
Description: the kind of relations to use when computing metric values
-
Mandatory: no
-
Default:
configured
(per the BDD hyper-edge creation algorithm option) -
Type: enum (
configured
,legacy
orlinearized
) -
Constraints: none
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
var-order
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
weighted-cm
,weighted-cm(relations=configured)
,weighted-cm(node-finder=george-liu, relations=configured, effect=both)
-
-
Choice
Applies multiple algorithms to the same variable order and chooses the best resulting order.
-
Name:
or
-
Arguments:
-
choices
-
Description: the orderers to apply
-
Mandatory: yes
-
Default: n/a
-
Type: list of orderers
-
Constraints: at least two orderers must be specified
-
-
metric
-
Description: the metric to use to compare orders
-
Mandatory: no
-
Default:
wes
-
Type: enum (
total-span
orwes
) -
Constraints: none
-
-
relations
-
Description: the kind of relations to use when computing metric values
-
Mandatory: no
-
Default:
configured
(per the BDD hyper-edge creation algorithm option) -
Type: enum (
configured
,legacy
orlinearized
) -
Constraints: none
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
var-order
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
or(choices=[dcsh,force])
,or(choices=[(force -> dcsh), (dcsh -> force)], metric=wes, relations=configured, effect=both)
-
-
Reverse
Reverses the variable order.
-
Name:
reverse
-
Arguments:
-
relations
-
Description: the kind of relations to use when computing metric values
-
Mandatory: no
-
Default:
configured
(per the BDD hyper-edge creation algorithm option) -
Type: enum (
configured
,legacy
orlinearized
) -
Constraints: none
-
-
effect
-
Description: the effect of the variable orderer
-
Mandatory: no
-
Default:
var-order
-
Type: enum (
var-order
,representations
orboth
) -
Constraints: none
-
-
-
Examples:
reverse
,+reverse(relations=configured, effect=both)
-
Node finders
Orderers that work on graphs may use a pseudo-peripheral node finder algorithm while computing a variable order. Multiple such node finders can be used:
-
George-Liu
Use the algorithm by George and Liu.
Name:
george-liu
-
Sloan
Use the algorithm by Sloan.
Name:
sloan
Metrics
To compare different orders, and choose the best one, metric values are used. Multiple metrics can be used:
-
Total span
Use the total span metric.
Name:
total-span
-
WES
Use the Weighted Event Span (WES) metric.
Name:
wes
Relations
Metric value can be computed using different variable relations derived from the CIF specification. Multiple metrics can be used:
-
Legacy
Use the legacy relations.
Name:
legacy
-
Linearized
Use the linearized relations.
Name:
linearized
-
Configured
Use the relations as configured using the BDD hyper-edge creation algorithm option.
Name:
configured
Effects
A variable orderer produces a variable order. The effect of a variable orderer determines what happens with the produced order:
-
It may be used as the new variable order. The produced variable order then becomes the variable order to be used as input to the next orderer, or the final order in case it is the effect of the last orderer. If the produced variable order is not used as the new variable order, the variable order remains unchanged by the orderer.
-
It may be used to compute new representations of the variable relations. Subsequent orderers will then use these new representations as input to algorithms and for computing metrics. If the produced variable order is not used to create new representations, the representations remain unchanged by the orderer.
The following effects can be configured:
-
Variable order
Uses the produced variable order as the new variable order. Does not update the representations.
Name:
var-order
-
Representations
Updates the representations. Does not use the produced variable order as the new variable order.
Name:
representations
-
Both
Uses the produced variable order as the new variable order, and updates the representations.
Name:
both