isl and How to Solve Bart’s Parametric Integer Programming Problem Sven Verdoolaege

Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
isl and How to Solve Bart’s Parametric Integer
Programming Problem
Sven Verdoolaege
October 30, 2009
1 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Outline
1
Motivation
2
isl and CLooG
3
Parametric Integer Programming
What?
Why?
How?
Observations
4
Improvements
piplib
barvinok
isl
5
Bart’s Problem
6
Conclusions
October 30, 2009
2 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Outline
1
Motivation
2
isl and CLooG
3
Parametric Integer Programming
What?
Why?
How?
Observations
4
Improvements
piplib
barvinok
isl
5
Bart’s Problem
6
Conclusions
October 30, 2009
3 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Integer Set Library
isl is an
LGPL
thread-safe
C
library for manipulating integer sets and relations
bounded by affine constraints
involving parameters and
existentially quantified variables
Supported operations include
basic operations such as intersection, union and set difference
integer projection
set coalescing
convex hull
integer affine hull
computing the lexicographic minimum of a relation,
4 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
5 / 37
Two Program Analysis and Transformation Tools
Why do we need an integer set library?
Equivalence checker
◮
◮
◮
Checks the equivalence of two programs represented in the polyhedral
model
Proves output is the same given that input is the same
Maintains maps between statement iterations of both programs that
should be proven to produce the same result
Requirements
◮
◮
manipulations on integer sets/maps
explicit support for existentially quantified variables
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
5 / 37
Two Program Analysis and Transformation Tools
Why do we need an integer set library?
Equivalence checker
◮
◮
◮
Checks the equivalence of two programs represented in the polyhedral
model
Proves output is the same given that input is the same
Maintains maps between statement iterations of both programs that
should be proven to produce the same result
Requirements
◮
◮
manipulations on integer sets/maps
explicit support for existentially quantified variables
CLooG
◮
Generates code for scanning integer points in polyhedra (iteration
domains)
Requirements
◮
◮
manipulations on integer sets
⇒ remove redundant constraints/code
explicit support for existentially quantified variables
⇒ replace some loops by guards
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Why not use a double description based library?
E.g., PolyLib, PPL, (polymake)
Who needs vertices anyway?
◮
◮
Very useful for LattE macchiato/barvinok style counting
(but neither equivalence checking or CLooG needs any counting)
Some operations can be performed more efficiently on explicit
representation
But:
⋆
⋆
Computing the dual can be costly
Double description requires more space
⇒ trade-off
(sets used in equivalence checking and CLooG usually have few
constraints)
6 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Why not use a double description based library?
E.g., PolyLib, PPL, (polymake)
Who needs vertices anyway?
◮
◮
Very useful for LattE macchiato/barvinok style counting
(but neither equivalence checking or CLooG needs any counting)
Some operations can be performed more efficiently on explicit
representation
But:
⋆
⋆
Computing the dual can be costly
Double description requires more space
⇒ trade-off
(sets used in equivalence checking and CLooG usually have few
constraints)
Usually focus on rational values
Little/no support for existentially quantified variables
6 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
7 / 37
Why do we need existentially quantified variables?
Modeling some problems
Which array elements are accessed in this loop?
for (j = 1; j <= s; ++j)
for (i = 1; i <= 8; ++i)
a[6i+9j-7] = a[6i+9j-7] + 5;
S(s) = {l ∈ Z | ∃i, j ∈ Z : l = 6i + 9j − 7 ∧ 1 ≤ j ≤ s ∧ 1 ≤ i ≤ 8}
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
7 / 37
Why do we need existentially quantified variables?
Modeling some problems
Which array elements are accessed in this loop?
for (j = 1; j <= s; ++j)
for (i = 1; i <= 8; ++i)
a[6i+9j-7] = a[6i+9j-7] + 5;
S(s) = {l ∈ Z | ∃i, j ∈ Z : l = 6i + 9j − 7 ∧ 1 ≤ j ≤ s ∧ 1 ≤ i ≤ 8}
Especially integer divisions/remainders
E.g., i % 10 <= 6
i
i − 10
≤6
10
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
7 / 37
Why do we need existentially quantified variables?
Modeling some problems
Which array elements are accessed in this loop?
for (j = 1; j <= s; ++j)
for (i = 1; i <= 8; ++i)
a[6i+9j-7] = a[6i+9j-7] + 5;
S(s) = {l ∈ Z | ∃i, j ∈ Z : l = 6i + 9j − 7 ∧ 1 ≤ j ≤ s ∧ 1 ≤ i ≤ 8}
Especially integer divisions/remainders
E.g., i % 10 <= 6
i
i − 10
≤6
10
i − 10α ≤ 6
with i − 9 ≤ 10α ≤ i
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
7 / 37
Why do we need existentially quantified variables?
Modeling some problems
Which array elements are accessed in this loop?
for (j = 1; j <= s; ++j)
for (i = 1; i <= 8; ++i)
a[6i+9j-7] = a[6i+9j-7] + 5;
S(s) = {l ∈ Z | ∃i, j ∈ Z : l = 6i + 9j − 7 ∧ 1 ≤ j ≤ s ∧ 1 ≤ i ≤ 8}
Especially integer divisions/remainders
E.g., i % 10 <= 6
i
i − 10
≤6
10
i − 10α ≤ 6
with i − 9 ≤ 10α ≤ i
◮
◮
May appear in original code
May be introduced by (PIP-based) dependence analysis
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Outline
1
Motivation
2
isl and CLooG
3
Parametric Integer Programming
What?
Why?
How?
Observations
4
Improvements
piplib
barvinok
isl
5
Bart’s Problem
6
Conclusions
October 30, 2009
8 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
CLooG Example
S1: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ j = i}
S2: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ i ≤ j ≤ n}
S3: {(i, j) | 1 ≤ i ≤ m ∧ j = n ≤ m}
j
i
October 30, 2009
9 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
CLooG Example
S1: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ j = i}
S2: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ i ≤ j ≤ n}
S3: {(i, j) | 1 ≤ i ≤ m ∧ j = n ≤ m}
j
i
October 30, 2009
9 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
CLooG Example
S1: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ j = i}
S2: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ i ≤ j ≤ n}
S3: {(i, j) | 1 ≤ i ≤ m ∧ j = n ≤ m}
j
i
October 30, 2009
9 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
CLooG Example
S1: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ j = i}
S2: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ i ≤ j ≤ n}
S3: {(i, j) | 1 ≤ i ≤ m ∧ j = n ≤ m}
j
for ( i =1; i <= m ; i ++) {
if ( i <= n ) {
S1 (i , i );
}
for ( j = i ;j <= n ; j ++) {
S2 ( i );
}
S3 (i , n );
}
i
October 30, 2009
9 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
CLooG Example
S1: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ j = i}
S2: {(i, j) | 1 ≤ i ≤ n ≤ m ∧ i ≤ j ≤ n}
S3: {(i, j) | 1 ≤ i ≤ m ∧ j = n ≤ m}
j
for ( i =1; i <= m ; i ++) {
if ( i <= n ) {
S1 (i , i );
}
for ( j = i ;j <= n ; j ++) {
S2 ( i );
}
S3 (i , n );
}
i
October 30, 2009
9 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Improved Code Generation using CLooG
Using PolyLib as a backend:
for (p1=0;p1<=floord(8*N+63,32);p1++) {
for (p3=max(max(max(max(0,ceild(-32*p1-27,4)),
ceild(512*p1-128*N-975,16)),ceild(28*p1-7*N-20,36)),
ceild(60*p1-15*N-44,68));
p3<=min(min(floord(4*M+47,16),floord(24*p1+5*M+36,20)),
floord(136*p1+31*M+224,124));p3++) {
if ((p1 >= 0) && (p1 <= floord(N-1,4))) {
for (p5=max(0,4*p3);p5<=min(M-1,4*p3+3);p5++) {
for (p7=max(0,4*p1);p7<=min(N-1,4*p1+3);p7++) {
S9(p3,p5,p1,p7); /* ... */
10 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Improved Code Generation using CLooG
Using PolyLib as a backend:
for (p1=0;p1<=floord(8*N+63,32);p1++) {
for (p3=max(max(max(max(0,ceild(-32*p1-27,4)),
ceild(512*p1-128*N-975,16)),ceild(28*p1-7*N-20,36)),
ceild(60*p1-15*N-44,68));
p3<=min(min(floord(4*M+47,16),floord(24*p1+5*M+36,20)),
floord(136*p1+31*M+224,124));p3++) {
if ((p1 >= 0) && (p1 <= floord(N-1,4))) {
for (p5=max(0,4*p3);p5<=min(M-1,4*p3+3);p5++) {
for (p7=max(0,4*p1);p7<=min(N-1,4*p1+3);p7++) {
S9(p3,p5,p1,p7); /* ... */
Using isl as a backend:
for (p1=0;p1<=floord(N+7,4);p1++) {
for (p3=max(0,ceild(4*p1-N+1,4));
p3<=min(floord(M+11,4),floord(4*p1+M+3,4));p3++) {
if (p1 <= floord(N-1,4)) {
for (p5=4*p3;p5<=min(M-1,4*p3+3);p5++) {
for (p7=4*p1;p7<=min(N-1,4*p1+3);p7++) {
S9(p3,p5,p1,p7); /* ... */
10 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
CLooG Speed Comparison
Previous example (HD)
CLooG test suite
Simple tiling example (UKB)
Extreme tiling example (UKB)
LU example (UKB)
Sobel example (HD)
PolyLib-64
PolyLib-gmp
isl-gmp
0.052s
2.468s
0.292s
2.940s
0.228s
0.184s
0.128s
3.976s
0.744s
7.224s
0.492s
0.516s
0.112s
2.828s
0.328s
1.428s
0.140s
0.068s
On Intel Xeon W3520 @ 2.66GHz
HD: Harald Devos; UKB: Uday K Bondhugula
11 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Outline
1
Motivation
2
isl and CLooG
3
Parametric Integer Programming
What?
Why?
How?
Observations
4
Improvements
piplib
barvinok
isl
5
Bart’s Problem
6
Conclusions
October 30, 2009
12 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
13 / 37
Lexicographical Order
#define N 5
for (i = 1; i <= N; ++i)
for (j = 1; j <= i; ++j)
a[i][j]=
S = { (i, j) | i ≥ 1 ∧ i ≤ N ∧ j ≥ 1 ∧ j ≤ i }
Execution order: (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), (4,2), (4,3),
(4,4) (5,1), (5,2), (5,3), (5,4), (5,5)
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
13 / 37
Lexicographical Order
#define N 5
for (i = 1; i <= N; ++i)
for (j = 1; j <= i; ++j)
a[i][j]=
S = { (i, j) | i ≥ 1 ∧ i ≤ N ∧ j ≥ 1 ∧ j ≤ i }
Execution order: (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), (4,2), (4,3),
(4,4) (5,1), (5,2), (5,3), (5,4), (5,5)
Lexicographical order:
a≺b≡
n
_
i=1

ai < bi ∧
i−1
^
j=1
⇒ smaller in first position where vectors differ

aj = bj 
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
14 / 37
Parametric Integer Programming
Given a relation R with parameters s
R(s) = { (x1 , x2 ) ∈ Zd1 × Zd2 | ∃z ∈ Ze : A1 x1 + A2 x2 + Bs + Dz ≥ c }
compute the lexicographic minimum of R:
lexmin R = { (x1 , x2 ) ∈ R | ∀x′2 ∈ R(s, x1 ) : x2 4 x′2 }
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
14 / 37
Parametric Integer Programming
Given a relation R with parameters s
R(s) = { (x1 , x2 ) ∈ Zd1 × Zd2 | ∃z ∈ Ze : A1 x1 + A2 x2 + Bs + Dz ≥ c }
compute the lexicographic minimum of R:
lexmin R = { (x1 , x2 ) ∈ R | ∀x′2 ∈ R(s, x1 ) : x2 4 x′2 }
Parametric integer programming is useful for
dependence analysis
(enumeration of) integer projections
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
14 / 37
Parametric Integer Programming
Given a relation R with parameters s
R(s) = { (x1 , x2 ) ∈ Zd1 × Zd2 | ∃z ∈ Ze : A1 x1 + A2 x2 + Bs + Dz ≥ c }
compute the lexicographic minimum of R:
lexmin R = { (x1 , x2 ) ∈ R | ∀x′2 ∈ R(s, x1 ) : x2 4 x′2 }
Parametric integer programming is useful for
dependence analysis
(enumeration of) integer projections
Technique: dual simplex + Gomory cuts
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Why?
Data dependence analysis
Given a read from an array, where did the data come from?
That is, when was it last written?
15 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
15 / 37
Parametric Integer Programming: Why?
Data dependence analysis
Given a read from an array, where did the data come from?
That is, when was it last written?
Example:
for ( i = 0; i <= N ; ++ i )
for ( j = 0; j <= i ; ++ j )
a [ i +2* j ] = a [ i +2* j ] + f (i , j );
for ( k = 0; k <= 3* N ; ++ k )
b [ k ] = 2* a [ k ];
For any read through a[k] in iteration k of the second loop, what is
the last iteration (i, j) of the first loop writing to the same array
element?
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
16 / 37
Parametric Integer Programming: Why?
Data dependence analysis
for ( i = 0; i <= N ; ++ i )
for ( j = 0; j <= i ; ++ j )
a [ i +2* j ] = a [ i +2* j ] + f (i , j );
for ( k = 0; k <= 3* N ; ++ k )
b [ k ] = 2* a [ k ];
Relation between iterations reading/writing same array element:
R = { (k) → (i, j) ∈ Z×Z2 | 0 ≤ i ≤ N∧0 ≤ j ≤ i∧0 ≤ k ≤ 3N∧k = i+2j }
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
16 / 37
Parametric Integer Programming: Why?
Data dependence analysis
for ( i = 0; i <= N ; ++ i )
for ( j = 0; j <= i ; ++ j )
a [ i +2* j ] = a [ i +2* j ] + f (i , j );
for ( k = 0; k <= 3* N ; ++ k )
b [ k ] = 2* a [ k ];
Relation between iterations reading/writing same array element:
R = { (k) → (i, j) ∈ Z×Z2 | 0 ≤ i ≤ N∧0 ≤ j ≤ i∧0 ≤ k ≤ 3N∧k = i+2j }
Last (i, j) writing to an array element: R ′ = lexmax R =
{ (k) → (k, 0) | 0 ≤ k ≤ N − 1 } ⊔
{ (k) → (2q−k, k −q) | ∃q ∈ Z : N ≤ k ≤ 3N ∧ 2q ≤ k + N ≤ 2q + 1 }
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: How?
Assume:
we want to compute the lexicographic minimum
all unknown are non-negative
⇒ constraints xi ≥ 0 are (implicitly) imposed
October 30, 2009
17 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
17 / 37
Parametric Integer Programming: How?
Assume:
we want to compute the lexicographic minimum
all unknown are non-negative
⇒ constraints xi ≥ 0 are (implicitly) imposed
Dual simplex (operations performed on simplex tableau)
start from basic solution 0 (intersection of constraints xi ≥ 0)
as long as there is any violated constraint, move to lexico-larger
adjacent basic solution
(simple bookkeeping ensures lexico-positive move is always possible, if
there is a solution)
first feasible basic solution found is lexico-minimal solution
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
17 / 37
Parametric Integer Programming: How?
Assume:
we want to compute the lexicographic minimum
all unknown are non-negative
⇒ constraints xi ≥ 0 are (implicitly) imposed
Dual simplex (operations performed on simplex tableau)
start from basic solution 0 (intersection of constraints xi ≥ 0)
as long as there is any violated constraint, move to lexico-larger
adjacent basic solution
(simple bookkeeping ensures lexico-positive move is always possible, if
there is a solution)
first feasible basic solution found is lexico-minimal solution
Gomory cuts
extra constraints added to exclude rational solutions
may involve “new parameters” (extra integer divisions)
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1
b:
2y ≥ p
c:
x ≥0
d:
y ≥0
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1
b:
2y ≥ p
c:
x ≥0
d:
y ≥0
p=3
•
(0, 0)
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1 0≥1
−
b:
2y ≥ p
0≥p
+/−
c:
x ≥0
0≥0
+
d:
y ≥0
0≥0
+
p=3
•
(0, 0)
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1 0≥1
−
b:
2y ≥ p
0≥p
+/−
c:
x ≥0
0≥0
+
d:
y ≥0
0≥0
+
p=3
• •
(1, 0)
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1
b:
2y ≥ p
c:
x ≥0
d:
y ≥0
p=3
•
(1, 0)
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1 1≥1
+
b:
2y ≥ p
0≥p
+/−
c:
x ≥0
1≥0
+
d:
y ≥0
0≥0
+
p=3
•
(1, 0)
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1 1≥1
+
b:
2y ≥ p
0≥p
+/−
c:
x ≥0
1≥0
+
d:
y ≥0
0≥0
+
p=3
•
p≤0
(1, 0)
p≥1
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1 1≥1
+
b:
2y ≥ p
0≥p
+/−
c:
x ≥0
1≥0
+
d:
y ≥0
0≥0
+
p=3
•
p≤0
(1, 0)
•
p = −1
(1, 0)
p≥1
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Parametric Integer Programming: Example
a:
x ≥y +1 1≥1
+
b:
2y ≥ p
0≥p
+
c:
x ≥0
1≥0
+
d:
y ≥0
0≥0
+
p=3
•
p≤0
(1, 0)
•
p = −1
(1, 0)
p≥1
October 30, 2009
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥y +1 1≥1
+
b:
2y ≥ p
0≥p
+/−
c:
x ≥0
1≥0
+
d:
y ≥0
0≥0
+
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1, 0)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥y +1 1≥1
+
b:
2y ≥ p
0≥p
−
c:
x ≥0
1≥0
+
d:
y ≥0
0≥0
+
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1, 0)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥y +1 1≥1
+
b:
2y ≥ p
0≥p
−
c:
x ≥0
1≥0
+
d:
y ≥0
0≥0
+
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1 + p/2, p/2)
•
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥y +1
b:
2y ≥ p
c:
x ≥0
d:
y ≥0
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1 + p/2, p/2)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥ y + 1 1 + p/2 ≥ p/2 + 1
b:
2y ≥ p
c:
d:
+
p≥p
+
x ≥0
1 + p/2 ≥ 0
+
y ≥0
p/2 ≥ 0
+
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1 + p/2, p/2)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥ y + 1 1 + p/2 ≥ p/2 + 1
b:
2y ≥ p
c:
d:
+
p≥p
+
x ≥0
1 + p/2 ≥ 0
+
y ≥0
p/2 ≥ 0
+
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1 + p/2, p/2)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥ y + 1 1 + p/2 ≥ p/2 + 1
b:
2y ≥ p
c:
+
p≥p
+
x ≥0
1 + p/2 ≥ 0
+
d:
y ≥0
p/2 ≥ 0
+
e:
y + ⌊p/2⌋ ≥ p
p/2 + ⌊p + 2⌋ ≥ p
−
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1 + p/2, p/2)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥ y + 1 1 + p/2 ≥ p/2 + 1
b:
2y ≥ p
c:
+
p≥p
+
x ≥0
1 + p/2 ≥ 0
+
d:
y ≥0
p/2 ≥ 0
+
e:
y + ⌊p/2⌋ ≥ p
p/2 + ⌊p + 2⌋ ≥ p
−
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1+p−⌊p/2⌋,p−⌊p/2⌋)
p=3
•
p = −1
•
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥y +1
b:
2y ≥ p
c:
x ≥0
d:
y ≥0
e:
y + ⌊p/2⌋ ≥ p
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1+p−⌊p/2⌋,p−⌊p/2⌋)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Parametric Integer Programming: Example
a:
x ≥ y + 1 1 + p − ⌊p/2⌋ ≥ p − ⌊p/2⌋ + 1
+
b:
2y ≥ p
2p − 2 ⌊p/2⌋ ≥ p
+
c:
x ≥0
1 + p − ⌊p/2⌋ ≥ 0
+
d:
y ≥0
p − ⌊p/2⌋ ≥ 0
+
e:
y + ⌊p/2⌋ ≥ p
p − ⌊p/2⌋ + ⌊p/2⌋ ≥ p
+
p=3
•
p≤0
(1, 0)
(1, 0)
p≥1
(1+p−⌊p/2⌋,p−⌊p/2⌋)
p=3
•
p = −1
•
18 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
19 / 37
Parametric Integer Programming: How?
Parameters are assumed to be integral
Set of parameter values is called the context
Determining the sign (+, −, +/−) of a constraint
+ there are no values of the parameters where constraint is violated
− there are no values of the parameters where constraint is not violated
+/− constraint is violated for only some values of the parameters
⇒ (non-parametric) integer feasibility problems
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
19 / 37
Parametric Integer Programming: How?
Parameters are assumed to be integral
Set of parameter values is called the context
Determining the sign (+, −, +/−) of a constraint
+ there are no values of the parameters where constraint is violated
− there are no values of the parameters where constraint is not violated
+/− constraint is violated for only some values of the parameters
⇒ (non-parametric) integer feasibility problems
piplib computes lexico-minimal value
found ⇒ problem feasible
not found ⇒ problem infeasible
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
20 / 37
Parametric Integer Programming: How?
Basic method starts from 0, assuming unknowns are non-negative
How to deal with unknowns/parameters of unrestricted sign?
⇒ “big parameter” trick
A special parameter M is assumed to be arbitrarily large (think ∞)
Problem is rewritten in terms of x′ = M1 + x
Initial value x′ = 0 corresponds to x = −M1 (think x = −∞)
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
20 / 37
Parametric Integer Programming: How?
Basic method starts from 0, assuming unknowns are non-negative
How to deal with unknowns/parameters of unrestricted sign?
⇒ “big parameter” trick
A special parameter M is assumed to be arbitrarily large (think ∞)
Problem is rewritten in terms of x′ = M1 + x
Initial value x′ = 0 corresponds to x = −M1 (think x = −∞)
Note: piplib uses different trick in context tableau
⇒ p is replaced by p + − p −
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Observations
Gomory cuts don’t cut it on infeasible problems
⇒ check feasibility of main tableau first (non-parametrically)
⇒ avoid Gomory cuts in context feasibility checks
21 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Observations
Gomory cuts don’t cut it on infeasible problems
⇒ check feasibility of main tableau first (non-parametrically)
⇒ avoid Gomory cuts in context feasibility checks
piplib doesn’t like (hidden) equalities among integer values
⇒ detect and exploit equalities
21 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Observations
Gomory cuts don’t cut it on infeasible problems
⇒ check feasibility of main tableau first (non-parametrically)
⇒ avoid Gomory cuts in context feasibility checks
piplib doesn’t like (hidden) equalities among integer values
⇒ detect and exploit equalities
much time is spent in context feasibility checks
⇒ use better algorithm for feasibility checks
⇒ try to perform checks incrementally
⇒ avoid checks as much as possible
21 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Observations
Gomory cuts don’t cut it on infeasible problems
⇒ check feasibility of main tableau first (non-parametrically)
⇒ avoid Gomory cuts in context feasibility checks
piplib doesn’t like (hidden) equalities among integer values
⇒ detect and exploit equalities
much time is spent in context feasibility checks
⇒ use better algorithm for feasibility checks
⇒ try to perform checks incrementally
⇒ avoid checks as much as possible
any “new parameter” increases the dimension of the problem
⇒ avoid needless introduction of new parameters
21 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Outline
1
Motivation
2
isl and CLooG
3
Parametric Integer Programming
What?
Why?
How?
Observations
4
Improvements
piplib
barvinok
isl
5
Bart’s Problem
6
Conclusions
October 30, 2009
22 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
23 / 37
Improvements in piplib
Some improvements in piplib compared to original implementation
perform tricks for handling unknowns and parameters of unrestricted
sign inside piplib [V., Dec. 2005, Feb. 2006]
big parameter considered divisible by any number [V., Aug. 2006]
avoid generation of duplicate new parameters [V., Apr. 2007]
simplify constraints [V., Apr. 2007]
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
24 / 37
Parametric Integer Programming in barvinok
barvinok’s lexmin performs parametric integer programming using a
completely different technique based on generating functions [V., 2006]
But, also maintains a “context” ⇒ feasibility checks
barvinok supports two kinds of feasibility checks
counting the integer points (0 ⇒ empty; not 0 ⇒ not empty)
⇒ Does not work very well in presence of many integer divisions
sampling domain using generalized basis reduction
⇒ some overhead, but fairly robust
barvinok keeps track of sample value in current context
⇒ when splitting the context, often only one case needs to be checked
⇒ reduces the number of feasibility checks by a factor of almost two
⇒ when extra integer division is added, new coordinate can be computed
easily
Context handling of lexmin can be seen as predecessor of isl
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
25 / 37
Parametric Integer Programming in isl
isl uses same algorithm as piplib in main tableau
(dual simplex + Gomory cuts)
isl supports two kinds of feasibility checks
recursive application (like piplib)
But,
◮
uses (separate) big parameter in context tableau as well
generalized basis reduction (like barvinok)
But,
◮
◮
generalized basis reduction is performed using incremental LP solver
equalities are detected in context tableau and, in some cases,
propagated to main tableau
In both cases,
context tableau is updated incrementally
a list of sample values is maintained
all equalities in initial main tableau are detected
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Updating Context Incrementally
Each split adds a new constraint to context tableau
Solution of context before split satisfies all previous inequalities
Working non-incrementally duplicates a lot of work
26 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Updating Context Incrementally
Each split adds a new constraint to context tableau
Solution of context before split satisfies all previous inequalities
Working non-incrementally duplicates a lot of work
Gomory cuts context: continue working before or after cuts?
+
+
−
−
◮
◮
always maintain integer sample
integer sample may also satisfy new constraint
if not, then previous cuts may be redundant
accumulation of a large number of cuts
initial implementation (never made public) kept cuts
current implementation drops cuts
26 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
26 / 37
Updating Context Incrementally
Each split adds a new constraint to context tableau
Solution of context before split satisfies all previous inequalities
Working non-incrementally duplicates a lot of work
Gomory cuts context: continue working before or after cuts?
+
+
−
−
◮
◮
always maintain integer sample
integer sample may also satisfy new constraint
if not, then previous cuts may be redundant
accumulation of a large number of cuts
initial implementation (never made public) kept cuts
current implementation drops cuts
Generalized basis reduction context
◮
◮
◮
incrementally maintain set of points with unit boxes in original set
non-empty ⇒ simply round up rational sample
incrementally maintain recession cone (gbr requires bounded sets)
current implementation does not compute reduced basis incrementally
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Maintaining a List of Sample Values
Checking the sign of a constraint
(evaluated in sample point of main tableau)
⇒ check at sample values (of context) first
◮
◮
◮
◮
both > 0 and < 0 ⇒ +/− (no check needed)
all ≥ 0 ⇒ check feasibility of < 0
all ≤ 0 ⇒ check feasibility of > 0
all = 0 (rare) ⇒ one or two checks needed
October 30, 2009
27 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Maintaining a List of Sample Values
Checking the sign of a constraint
(evaluated in sample point of main tableau)
⇒ check at sample values (of context) first
◮
◮
◮
◮
both > 0 and < 0 ⇒ +/− (no check needed)
all ≥ 0 ⇒ check feasibility of < 0
all ≤ 0 ⇒ check feasibility of > 0
all = 0 (rare) ⇒ one or two checks needed
Feasibility check
⇒ add sample value found, if any
October 30, 2009
27 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Maintaining a List of Sample Values
Checking the sign of a constraint
(evaluated in sample point of main tableau)
⇒ check at sample values (of context) first
◮
◮
◮
◮
both > 0 and < 0 ⇒ +/− (no check needed)
all ≥ 0 ⇒ check feasibility of < 0
all ≤ 0 ⇒ check feasibility of > 0
all = 0 (rare) ⇒ one or two checks needed
Feasibility check
⇒ add sample value found, if any
Adding a constraint to the context
⇒ (temporarily) remove samples violating constraint
October 30, 2009
27 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Detecting and Exploiting Equalities
Exploiting equalities
pip models equality as pair of inequalities
isl uses equality to reduce number of columns in tableau
28 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Detecting and Exploiting Equalities
Exploiting equalities
pip models equality as pair of inequalities
isl uses equality to reduce number of columns in tableau
Detecting equalities
Main tableau
⇒ compute integer affine hull of input set
⇒ using generalized basis reduction
28 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Detecting and Exploiting Equalities
Exploiting equalities
pip models equality as pair of inequalities
isl uses equality to reduce number of columns in tableau
Detecting equalities
Main tableau
⇒ compute integer affine hull of input set
⇒ using generalized basis reduction
Context tableau (only in gbr case)
◮
check for equalities after each cut introducing new integer division
⇒ compute integer affine hull (incrementally)
⇒ exploit list of sample values in computing affine hull
⇒ update list of sample values
28 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
28 / 37
Detecting and Exploiting Equalities
Exploiting equalities
pip models equality as pair of inequalities
isl uses equality to reduce number of columns in tableau
Detecting equalities
Main tableau
⇒ compute integer affine hull of input set
⇒ using generalized basis reduction
Context tableau (only in gbr case)
◮
◮
check for equalities after each cut introducing new integer division
⇒ compute integer affine hull (incrementally)
⇒ exploit list of sample values in computing affine hull
⇒ update list of sample values
propagate equalities to main tableau that express new integer division
as integer linear combination of parameters and previous integer
divisions
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Detecting equalities in main tableau
For example: fimmel.pip
pip returns
(if #[ -1 0 1]
(if #[ 0 -1 0]
()
(if #[ 0 -1 5]
(if #[ -3 -1 5]
(if #[ 0 -1 1]
(newparm 2 (div #[ 0 1 1] 3))
(newparm 3 (div #[ 0 1 5 3] 6))
(newparm 4 (div #[ 0 2 0 1 0] 3))
()
(if #[ 0 -1 3]
(newparm 2 (div #[ 0 2 1] 3))
()
()
)
)
(if #[ 0 -1 3]
(newparm 2 (div #[ 0 2 1] 3))
()
()
)
)
()
)
)
()
)
isl detects absence of solution before starting dual simplex method
29 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
30 / 37
Which Split First?
The main tableau may have many constraints with sign +/−
Which constraint should be used first?
pip: take constraint with smallest biggest coefficient
isl: take constraint that makes most other splitting constraints
redundant
⇒ on positive side of split, all of these redundant constraints will also
have a positive sign
⇒ on negative side of split, we have to move to a different sample point
⇒ unpredictable effect on signs of constraints
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Why not Use Omega to Check Feasibility?
problem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
dim
6
6
5
5
5
3
8
7
7
8
4
6
12
11
10
9
7
4
3
3
4
4
4
4
2
5
solution
yes
yes
yes
yes
yes
no
no
no
no
yes
yes
no
yes
yes
yes
yes
yes
yes
no
yes
yes
no
no
no
no
yes
isl
0.004s
0.000s
0.012s
0.004s
0.032s
0.012s
0.008s
0.008s
0.008s
0.000s
0.008s
0.000s
0.012s
0.008s
0.012s
0.008s
0.008s
0.004s
0.000s
0.000s
0.012s
0.008s
0.008s
0.008s
0.004s
0.004s
Omega
error?
error?
error?
error?
error?
0.016s
0.012s
0.016s
0.020s
0.016s
0.012s
0.012s
max # constr (512)
parse error?
0.016s
0.020s
0.024s
parse error?
0.016s
0.012s
“no suitable constraint”
parse error?
overflow?
overflow?
0.008s
parse error?
parse
parse
parse
parse
parse
Omega+
segmentation fault
segmentation fault
segmentation fault
segmentation fault
segmentation fault
0.000s
0.000s
0.004s
0.000s
0.000s
0.004s
0.000s
max # constr (2048)
0.240s
0.004s
0.004s
0.004s
0.004s
0.000s
0.000s
> 5m
> 5m
overflow
> 5m
0.000s
segmentation fault
October 30, 2009
31 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Outline
1
Motivation
2
isl and CLooG
3
Parametric Integer Programming
What?
Why?
How?
Observations
4
Improvements
piplib
barvinok
isl
5
Bart’s Problem
6
Conclusions
October 30, 2009
32 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Bart’s Dependence Analysis Problem
for i1 = 1 : 1 : 8 ,
for i2 = 1 : 1 : 2 ,
for i3 = 1 : 1 : 2 ,
for i4 = 1 : 1 : 2 ,
for i5 = 1 : 1 : 2 ,
for i6 = 1 : 1 : 2 ,
for i7 = 1 : 1 : 2 ,
for i8 = 1 : 1 : 2 ,
for i9 = 1 : 1 : 2 ,
for i10 = 1 : 1 : 2 ,
[ x ( i1 -1 , i2 -1+2* i3 -2+4* i4 -4+8* i5 -8+16* i6 -16+32* i7 -32+
64* i8 -64+128* i9 -128+256* i10 -256) ] = d ( u ( i0 ) );
end
end
end
end
end
end
end
end
end
end
for j1 = 1 : 1 : 8 ,
for j2 = 1 : 1 : 128 ,
[ y ( i0 ) ] = f ( x ( j1 -1 ,3* j2 -3+66));
end
end
33 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
34 / 37
A Corresponding Parametric Integer Programming Problem
4
1
1
1
1
4
-1 0 8
1 0 -1
0 -1 128
0 1 -1
-1
24 14
1 0 1 2 4 8 16 32 64 128 256 0 3 574
1 0 -1 -2 -4 -8 -16 -32 -64 -128 -256 0 -3 -574
1 1 0 0 0 0 0 0 0 0 0 1 0 0
1 -1 0 0 0 0 0 0 0 0 0 -1 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 8
1 -1 0 0 0 0 0 0 0 0 0 0 0 -1
1 0 1 0 0 0 0 0 0 0 0 0 0 2
1 0 -1 0 0 0 0 0 0 0 0 0 0 -1
1 0 0 1 0 0 0 0 0 0 0 0 0 2
1 0 0 -1 0 0 0 0 0 0 0 0 0 -1
1 0 0 0 1 0 0 0 0 0 0 0 0 2
1 0 0 0 -1 0 0 0 0 0 0 0 0 -1
1 0 0 0 0 1 0 0 0 0 0 0 0 2
1 0 0 0 0 -1 0 0 0 0 0 0 0 -1
1 0 0 0 0 0 1 0 0 0 0 0 0 2
1 0 0 0 0 0 -1 0 0 0 0 0 0 -1
1 0 0 0 0 0 0 1 0 0 0 0 0 2
1 0 0 0 0 0 0 -1 0 0 0 0 0 -1
1 0 0 0 0 0 0 0 1 0 0 0 0 2
1 0 0 0 0 0 0 0 -1 0 0 0 0 -1
1 0 0 0 0 0 0 0 0 1 0 0 0 2
1 0 0 0 0 0 0 0 0 -1 0 0 0 -1
1 0 0 0 0 0 0 0 0 0 1 0 0 2
1 0 0 0 0 0 0 0 0 0 -1 0 0 -1
Urs_unknowns
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
35 / 37
Solving Bart’s Parametric Integer Programming Problem
Computation times
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
35 / 37
Solving Bart’s Parametric Integer Programming Problem
Computation times
pip: 47.5s
Answer: The solution is too complex! : sol
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
35 / 37
Solving Bart’s Parametric Integer Programming Problem
Computation times
pip: 47.5s
Answer: The solution is too complex! : sol
lexmin: 275m
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
35 / 37
Solving Bart’s Parametric Integer Programming Problem
Computation times
pip: 47.5s
Answer: The solution is too complex! : sol
lexmin: 275m
isl pip with Gomory cuts context: ∞
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
35 / 37
Solving Bart’s Parametric Integer Programming Problem
Computation times
pip: 47.5s
Answer: The solution is too complex! : sol
lexmin: 275m
isl pip with Gomory cuts context: ∞
isl pip with gbr context: 3s
◮
◮
without detection of equalities: ∞
without propagation of equalities: 8m
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
35 / 37
Solving Bart’s Parametric Integer Programming Problem
Computation times
pip: 47.5s
Answer: The solution is too complex! : sol
lexmin: 275m
isl pip with Gomory cuts context: ∞
isl pip with gbr context: 3s
◮
◮
without detection of equalities: ∞
without propagation of equalities: 8m
Explanation:
many integer divisions are generated, each depending on previous
one(s)
after several splits of context, most integer divisions have fixed value
propagating fixed values to main tableau stops generation of new
integer divisions
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
Outline
1
Motivation
2
isl and CLooG
3
Parametric Integer Programming
What?
Why?
How?
Observations
4
Improvements
piplib
barvinok
isl
5
Bart’s Problem
6
Conclusions
October 30, 2009
36 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Conclusions
isl: a new integer set library
currently used in equivalence checking tool and CLooG:
◮
Produces better code than PolyLib backend, without speed penalty
explicit support for existentially quantified variables
all computations in exact integer arithmetic using GMP
built-in (P)ILP solver and incremental LP solver
◮
PILP solver can handle Bart’s problem
released under LGPL license
37 / 37
Sven Verdoolaege
isl and How to Solve Bart’s PIP Problem
October 30, 2009
Conclusions
isl: a new integer set library
currently used in equivalence checking tool and CLooG:
◮
Produces better code than PolyLib backend, without speed penalty
explicit support for existentially quantified variables
all computations in exact integer arithmetic using GMP
built-in (P)ILP solver and incremental LP solver
◮
PILP solver can handle Bart’s problem
released under LGPL license
Future Work
further optimizations
isl calculator (similar to Omega calculator)
port barvinok to isl
barvinok currently uses
◮
◮
PolyLib: GPLv2 only, . . .
⇒ isl needs chamber decomposition and parametric vertices
NTL: not thread-safe, C++
⇒ isl needs LLL
37 / 37