On the Performance of the Parma Polyhedra Library
It is easier to optimize correct code than to correct optimized code. —Bill Harlan
One natural question (and one that is indeed asked increasingly often) is how does the efficiency of the Parma Polyhedra Library compare with that of other polyhedra libraries. Of course, such a question does not have a definite answer. Apart from clarifying whether CPU or memory efficiency or both are the intended measures of interest, the answer will depend on the applications one is interested in: with different applications the results can vary wildly. Moreover, even within the same application, big variations may be observed for different inputs.
Caveat emptor: For all the above reasons, the only sensible piece of advice we can offer is: if you really care about performance, measure the performance of your application with the biggest variety of inputs you can come up with. Then choose the library that gives you the best results for your definition of “best result”.
Test | PPL | Polka | PolyLib | cddlib | lrslib | pd |
---|---|---|---|---|---|---|
ccc4.ext | N/A | N/A | 0.03 | 0.01 | N/A | * |
ccc5.ext | N/A | N/A | 0.04 | 0.02 | N/A | * |
ccc6.ext | 0.02 | 0.02 | 0.26 | 0.79 | 3.17 | * |
ccp4.ext | N/A | N/A | 0.03 | 0.01 | N/A | N/A |
ccp5.ext | N/A | N/A | 0.04 | 0.03 | N/A | 5.28 |
ccp6.ext | 0.05 | 0.04 | 0.29 | 1.15 | 4.04 | N/A |
cp4.ext | N/A | N/A | 0.03 | 0.01 | N/A | 0.01 |
cp5.ext | N/A | N/A | 0.05 | 0.03 | N/A | 5.34 |
cp6.ext | 0.05 | 0.04 | 0.29 | 1.14 | 4.07 | N/A |
cube.ext | N/A | N/A | 0.02 | N/A | N/A | N/A |
cut16_11.ext | N/A | N/A | 0.04 | 0.03 | N/A | 3.58 |
cut32_16.ext | 0.05 | 0.04 | 0.3 | 1.15 | 4.46 | N/A |
cyclic10-4.ext | N/A | N/A | 0.02 | N/A | N/A | 0.01 |
cyclic12-6.ext | N/A | N/A | 0.02 | 0.02 | N/A | 0.44 |
cyclic14-8.ext | N/A | N/A | 0.04 | 0.08 | 0.01 | 2.11 |
cyclic16-10.ext | 0.02 | 0.02 | 0.06 | 0.3 | 0.03 | N/A |
dcube10.ext | 0.01 | 0.01 | 0.08 | 0.31 | 0.02 | N/A |
dcube12.ext | 0.13 | 0.13 | 2.61 | 1.67 | 0.12 | N/A |
dcube3.ext | N/A | N/A | 0.02 | N/A | N/A | N/A |
dcube6.ext | N/A | N/A | 0.03 | 0.01 | N/A | 0.36 |
dcube8.ext | N/A | N/A | 0.04 | 0.06 | N/A | 8.46 |
irbox20-4.ext | N/A | N/A | 0.02 | 0.02 | N/A | 0.02 |
irbox200-4.ext | 0.02 | 0.03 | 0.03 | 1.26 | 0.05 | 0.21 |
mp5.ext | N/A | N/A | 0.05 | 0.77 | 0.91 | 4.16 |
redcheck.ext | N/A | N/A | 0.01 | N/A | N/A | N/A |
reg24-5.ext | N/A | N/A | 0.02 | 0.02 | N/A | 0.02 |
reg600-5_m.ext | 5.15 | 16.96 | 12.47 | 160.58 | 31.38 | * |
samplev1.ext | N/A | N/A | 0.02 | N/A | N/A | * |
samplev2.ext | N/A | N/A | 0.02 | 0.01 | N/A | * |
samplev3.ext | N/A | N/A | 0.01 | N/A | N/A | * |
tsp5.ext | N/A | N/A | 0.04 | 0.01 | N/A | * |
1d.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | * |
1da.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | * |
allzero.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | * |
cp4.ine | N/A | N/A | 0.02 | 0.01 | <I>0.00</I> | * |
cp5.ine | 0.01 | 0.01 | 0.05 | 0.18 | <I>5.99</I> | * |
cross10.ine | 0.04 | 0.06 | 0.13 | 12.16 | N/A | 1.32 |
cross12.ine | 0.62 | 2.88 | 3.04 | 216.91 | N/A | 4.8 |
cross4.ine | N/A | N/A | 0.02 | 0.01 | <I>0.01</I> | N/A |
cross6.ine | N/A | N/A | 0.03 | 0.05 | <I>0.11</I> | 0.01 |
cross8.ine | N/A | N/A | 0.04 | 0.71 | <I>29.87</I> | 0.13 |
cube.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | N/A |
cube10.ine | 0.01 | 0.01 | 0.15 | 0.33 | <I>0.04</I> | N/A |
cube12.ine | 0.14 | 0.13 | 3.92 | 1.76 | <I>0.19</I> | N/A |
cube3.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | N/A |
cube6.ine | N/A | N/A | 0.03 | 0.01 | <I>0.01</I> | 0.36 |
cube8.ine | N/A | N/A | 0.04 | 0.06 | <I>0.00</I> | 2.4 |
cubetop.ine | N/A | N/A | 0.02 | N/A | <I>0.01</I> | * |
cubocta.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | N/A |
cyc.ine | N/A | N/A | 0.02 | 0.01 | <I>0.00</I> | N/A |
cyclic17_8.ine | 0.04 | 0.05 | 0.13 | 0.42 | <I>0.09</I> | N/A |
diamond.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | N/A |
dodeca_m.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | * |
ex1.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | * |
grcubocta.ine | N/A | N/A | 0.02 | 0.01 | <I>0.00</I> | 0.01 |
hexocta.ine | N/A | N/A | 0.01 | 0.04 | <I>0.00</I> | 0.01 |
icododeca_m.ine | N/A | 0.01 | 0.03 | 0.08 | <I>0.00</I> | * |
in0.ine | N/A | N/A | 0.03 | N/A | <I>0.00</I> | * |
in1.ine | N/A | N/A | 0.03 | 0.02 | <I>0.00</I> | * |
in2.ine | N/A | N/A | 0.02 | 0.01 | <I>0.00</I> | * |
in3.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | * |
in4.ine | N/A | N/A | 0.03 | 0.02 | <I>0.00</I> | * |
in5.ine | N/A | N/A | 0.05 | 0.04 | <I>0.00</I> | * |
in6.ine | 0.01 | 0.02 | 0.09 | 0.56 | <I>0.04</I> | * |
in7.ine | 0.18 | 0.29 | 0.45 | 1.23 | <I>0.09</I> | * |
infeas.ine | N/A | N/A | 0.03 | 0.01 | <I>0.00</I> | * |
integralpoints.ine | N/A | N/A | 0.04 | 0.07 | <I>0.00</I> | * |
kkd18_4.ine | N/A | N/A | 0.02 | 0.02 | <I>0.00</I> | * |
kkd27_5.ine | 0.05 | 0.06 | 0.07 | 0.1 | <I>0.01</I> | * |
kkd38_6.ine | 3.3 | 6.98 | 1.59 | 0.38 | <I>0.06</I> | * |
kq20_11_m.ine | 0.19 | 0.29 | 0.44 | 1.19 | <I>0.08</I> | * |
metric40_11.ine | N/A | N/A | 0.04 | 0.09 | <I>0.55</I> | * |
metric80_16.ine | 0.13 | 0.11 | 0.06 | 0.68 | <I>30.84</I> | * |
mit31-20.ine | 5.68 | 28.24 | 121.33 | 110.64 | <I>25.11</I> | N/A |
mp5.ine | N/A | N/A | 0.04 | 0.08 | <I>0.55</I> | * |
mp5a.ine | N/A | N/A | 0.05 | 0.08 | <I>0.59</I> | * |
mp6.ine | 0.37 | 0.3 | 0.76 | 6.03 | <I>1148.84</I> | * |
nonfull.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | * |
origin.ine | N/A | N/A | 0.03 | N/A | <I>0.00</I> | * |
project1_m.ine | N/A | N/A | 0.03 | 0.04 | <I>0.01</I> | 1.04 |
project1res.ine | N/A | N/A | 0.02 | 0.01 | <I>0.00</I> | 0.01 |
project2_m.ine | 0.02 | 0.02 | 0.05 | 0.59 | <I>0.14</I> | * |
project2res.ine | N/A | N/A | 0.02 | 0.11 | <I>0.01</I> | * |
rcubocta.ine | N/A | N/A | 0.01 | 0.01 | <I>0.00</I> | N/A |
reg24-5.ine | N/A | N/A | 0.02 | 0.02 | <I>0.00</I> | 0.01 |
rhomtria_m.ine | N/A | N/A | 0.02 | 0.06 | <I>0.01</I> | * |
sample.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | N/A |
sampleh1.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | * |
sampleh2.ine | N/A | N/A | 0.01 | 0.01 | <I>0.00</I> | * |
sampleh3.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | * |
sampleh4.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | * |
sampleh5.ine | N/A | N/A | 0.01 | 0.01 | <I>0.00</I> | * |
sampleh6.ine | N/A | N/A | 0.02 | N/A | <I>0.00</I> | * |
sampleh7.ine | N/A | N/A | 0.01 | N/A | <I>0.00</I> | * |
sampleh8.ine | 8.44 | 75.89 | 84.11 | N/A | <I>4.52</I> | * |
trunc10.ine | 9.98 | 8.79 | 0.07 | 2.3 | <I>8.81</I> | 9.23 |
trunc7.ine | 0.03 | 0.02 | 0.04 | 0.17 | <I>0.18</I> | 9.68 |
tsp5.ine | N/A | N/A | 0.04 | 0.02 | <I>0.01</I> | * |