Go to the first, previous, next, last section, table of contents.
NuSMV uses the state of the art BDD package CUDD
[Som98]. Control over the BDD package can very important to tune
the performance of the system. In particular, the order of variables is
critical to control the memory and the time required by operations over
BDDs.  Reordering methods can be activated to determine better variable
orders, in order to reduce the size of the existing BDDs. Reordering
methods can be activated either
Reordering of the variables can be triggered in two ways: by the user,
or by the BDD package.  In the first way, reordering is triggered by the
interactive shell command dynamic_var_ordering with the -f
option.
Reordering is triggered by the BDD package when the number of nodes
reaches a given threshold. The threshold is initialized and
automatically adjusted after each reordering by the package.  This is
called dynamical reordering, and can be enabled or disabled by the user.
Dynamic reordering is enabled with the shell command
dynamic_var_ordering with the option -e, and disabled with
the -d option.
- Environment Variable: enable_reorder
- 
Specifies whether dynamic reordering is enabled (when value is `0')
or disabled (when value is `1').
- Environment Variable: reorder_method
- 
Specifies the ordering method to be used when dynamic variable
reordering is fired. The possible values, corresponding to the
reordering methods available with the CUDD package, are listed below.
The default value is sift.
- sift:
- 
Moves each variable throughout the order to find an optimal position for
that variable (assuming all other variables are fixed). This generally
achieves greater size reductions than the window method, but is slower.
- random:
- 
Pairs of variables are randomly chosen, and swapped in the order. The
swap is performed by a series of swaps of adjacent variables. The best
order among those obtained by the series of swaps is retained. The
number of pairs chosen for swapping equals the number of variables in
the diagram.
- random_pivot:
- 
Same as random, but the two variables are chosen so that the
first is above the variable with the largest number of nodes, and the
second is below that variable. In case there are several variables tied
for the maximum number of nodes, the one closest to the root is used.
- sift_converge:
- 
The siftmethod is iterated until no further improvement is
obtained.
- symmetry_sift:
- 
This method is an implementation of symmetric sifting. It is similar to
sifting, with one addition: Variables that become adjacent during
sifting are tested for symmetry. If they are symmetric, they are linked
in a group. Sifting then continues with a group being moved, instead of
a single variable.
- symmetry_sift_converge:
- 
The symmetry_siftmethod is iterated until no further improvement
is obtained.
- window{2,3,4}:
- 
Permutes the variables within windows of n adjacent variables, where
n can be either 2, 3 or 4, so as to minimize the overall BDD size.
- window{2,3,4}_converge:
- 
The window{2,3,4} method is iterated until no further improvement is
obtained.
- group_sift:
- 
This method is similar to symmetry_sift, but uses more general
criteria to create groups.
- group_sift_converge:
- 
The group_siftmethod is iterated until no further improvement
is obtained.
- annealing:
- 
This method is an implementation of simulated annealing for variable
ordering. This method is potentially very slow.
- genetic:
- 
This method is an implementation of a genetic algorithm for variable
ordering. This method is potentially very slow.
- exact:
- 
This method implements a dynamic programming approach to exact
reordering. It only stores a BDD at a time. Therefore, it is relatively
efficient in terms of memory. Compared to other reordering strategies,
it is very slow, and is not recommended for more than 16 boolean
variables.
- linear:
- 
This method is a combination of sifting and linear transformations.
- linear_conv:
- 
The linearmethod is iterated until no further improvement is obtained.
 
- Command: dynamic_var_ordering [[-d] | [-e method] | [-f method] [-h]]
- 
Controls the application and the modalities of (dynamic) variable
ordering. When no options are specified, the current status of dynamic
ordering is displayed. At most one of the options -e,-f,
and-dshould be specified.
Dynamic ordering may be time consuming, but can often reduce the size of
the BDDs dramatically. A good point to invoke dynamic ordering
explicitly (using the -foption) is after the commandsbuild_model, once the transition relation has been built.  It is
possible to save the ordering found usingwrite_orderin order to
reuse it (usingbuild_model -i file) in the future.
 
- -d
- 
Disables dynamic ordering.
- -f method
- 
Forces reordering of variables with the specified method.
- -e method
- 
Enables dynamic ordering to trigger automatically whenever a
certain threshold on the overall BDD size is reached.
 
method must be one of the values allowed for the environment
variable reorder_method.
 
- Command: print_bdd_stats [-h]
- 
Prints the statistics for the BDD package. The amount of information
depends on the BDD package configuration established at compilation
time. The configuration parameters are printed out too. More information
about statistic and parameters can be found in the documentation of the
CUDD Decision Diagram package.
- Command: set_bdd_parameters [-h] [-s]
- 
Creates a table with the value of all the flags
currently active in NuSMVand change accordingly the configurable
parameters of the BDD package.
- -s
- 
Print the bdd parameter and statistics after the modification.
 
The command uses the global DD manager and the set of pairs
(variable,value) of the NuSMVenvironment, the function sets
specific BDD parameters to the given values. This command works in
conjunction with `print_bdd_stats'.
 `print_bdd_stats' first prints a report of the parameters
and statistics of the DD manager. By using the command
`set', the user may modify the value of any of the
parameters of the underlying BDD package. The way to do it is by setting
a value in the variable `BDD.parameter name' where `parameter
name' is the name of the parameter exactly as printed by the
`print_bdd_stats' command.
 The most important parameters are:
 
- Hard limit for cache size
 Its the maximum number of entries in the cache. Usually it is
automatically determined based on the available memory.
- Cache hit threshold for resizing
 The hit ratio that causes the resize of the cache. The default value is30%.
- Limit for fast unique table growth
 This parameter controls the threshold beyond which no fast growth of the
unique table is allowed. Usually a suitable value is determined based on
the available memory.
- Garbage collection enabled
 Enables or disables the garbage collection. Initially the garbage
collection is enabled.
 
These parameters can have a big impact on the performances. See the
documentation of the CUDD Decision Diagram package for a more detailed
explanation of the meaning of these parameters and how they can affect
performances.
 
NuSMV <nusmv@irst.itc.it>