Age | Commit message (Collapse) | Author | Files | Lines |
|
While basis reduction is very useful on difficult problems, it is
overkill on easy problems. In fact, the basis reduction computation
can be quite expensive, especially in the presence of large coefficients.
This may happen in particular during the affine hull computation
when only a few sample points have been found so far. If these
points have large values, then the equalities that describe their
affine hull may have coefficients with larger values still.
Perform a greedy search before computing a reduced basis.
We also perform a greedy search after computing the reduced basis
just in case the problem has become easy through this basis reduction.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
We will be able to reuse them in the next commit.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
We only modify the tableau through calls to isl_tab_add_valid_eq,
which should never result in an empty tableau, given that
the tableau was initially not empty.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Signed-off-by: Tobias Grosser <tobias@grosser.es>
Signed-off-by: Andreas Kloeckner <kloeckner@cims.nyu.edu>
Signed-off-by: Todor Stefanov <stefanov@liacs.nl>
Signed-off-by: Sven van Haastregt <svhaastr@liacs.nl>
Signed-off-by: Isabelle Ryl <isabelle.ryl@inria.fr>
Signed-off-by: Mythri Alle <mythri.allel@gmail.com>
Signed-off-by: Wim De Clercq <Wim.DeClercq@lrd.kuleuven.be>
Signed-off-by: Anne Cormier <Anne.Cormier@ens.fr>
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
If the user wants to keep track of a basic map representation of the tableau,
then we need to make sure that the initial tableau corresponds exactly to
the input. In particular, we need to make sure that no (redundant) constraints
are removed.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
We also add some getters and setters for options that are known to
be used from outside of isl.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
The old name was confusing because the name suggested that the object
represents a single dimension, while in fact it represents an entire space.
The documented isl_dim based names are for backward compatibility.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Although the *_fast_* functions are certainly meant to be faster than
their unqualified alternatives, they are faster only because they are
not complete. The "plain" qualification is hopefully better at conveying
the idea that these functions only consider the obvious cases.
We keep some of the *_fast_* names for backward compatibility.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Internally, these are essentially the same.
We do keep the distinction in the external interface.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
We need to turn on the nostdinc option of automake as otherwise
it would include -I$(top_builddir)/include/isl in DEFAULT_INCLUDES
because of
AC_CONFIG_HEADERS(include/isl/config.h)
in configure.ac.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
The new name is more consistent with other functions and avoids confusion
as to what is being added.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
|
|
|
|
|
|
|
|
|
|
|
|
n_unbounded and n_zero are initialized to zero, but they can
be set to non-zero values in isl_tab_set_initial_basis_with_cone.
If isl_tab_sample is later called on an updated tab, but with
the old basis removed, then these values, in particular n_unbounded,
may not be valid anymore.
In particular, this happens in isl_tab_pip.c's gbr_get_sample.
Arguably, gbr_get_sample should reset the values of n_zero and n_unbounded
when it drops the basis, but it doens't hurt for initial_basis
to reset those values too.
|
|
|
|
|
|
|
|
isl_tabs are not reference counted, so it's easier to deal with a status
than to have to keep track of whether the isl_tab may have been destroyed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In other words, adapt the implementation of isl_basic_set_samples
in polytope_scan.c
This avoids the reconstruction of tableaus and allows for a refactoring
that takes a tableau as input.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
On larger problem, much time was spent on repeated basis reductions
with little or no reduction on the number of points visited.
The initial basis reduction seems to be sufficient in most cases.
|
|
|
|
|
|
|
|
For the pip based sampler, projecting out the lineality space
is part of isl_basic_set_skew_to_positive_orthant, so there is
no need for a separate projection step before the skewing.
For the gbr based sampler, there is no need to project out the lineality
space. The lineality space will simply be part of the recession cone,
which is handled more efficiently than the projection.
In particular, for systems with many variables, the unimodular transformation
used in the projection may have very large coefficients, which in turn
leads to constraints with large coefficients. Since there is no need
to do this projection, it is best to avoid it.
|
|
Also, replace independent_bounds in isl_sample.c by that
of isl_sample_piplib.c
The difference is that the latter returns affine bounds
rather than linear bounds and that it return the actual
bounds from the set rather than some linear combinations
of bounds.
It is usually better to use the original bounds as
the linearly transformed bounds may have bigger coefficients
and may therefore be more difficult to process.
|