[PPL-devel] [GIT] ppl/ppl(sparse_matrices): PIP_Problem: optimize solve() for backends with fast random writes.

Marco Poletti poletti.marco at gmail.com
Thu Apr 15 19:35:33 CEST 2010


Module: ppl/ppl
Branch: sparse_matrices
Commit: b392bd331e5331d3fad9a9e359753e3cfcf962c6
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=b392bd331e5331d3fad9a9e359753e3cfcf962c6

Author: Marco Poletti <poletti.marco at gmail.com>
Date:   Thu Apr 15 18:45:22 2010 +0200

PIP_Problem: optimize solve() for backends with fast random writes.

---

 src/PIP_Problem.cc |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/src/PIP_Problem.cc b/src/PIP_Problem.cc
index fa01e4e..cc9ede9 100644
--- a/src/PIP_Problem.cc
+++ b/src/PIP_Problem.cc
@@ -159,6 +159,7 @@ PPL::PIP_Problem::solve() const {
           = x.initial_context[x.initial_context.num_rows()-1];
 
         {
+#ifdef PPL_SPARSE_BACKEND_SLOW_RANDOM_WRITES
           matrix_row_iterator itr = row.end();
 
           if (c.inhomogeneous_term() != 0) {
@@ -202,6 +203,30 @@ PPL::PIP_Problem::solve() const {
                 break;
             }
           }
+#else // defined(PPL_SPARSE_BACKEND_SLOW_RANDOM_WRITES)
+          if (c.inhomogeneous_term() != 0) {
+            Coefficient& row0 = row[0];
+            row0 = c.inhomogeneous_term();
+            // Adjust inhomogenous term if strict.
+            if (c.is_strict_inequality())
+              --row0;
+          } else {
+            // Adjust inhomogenous term if strict.
+            if (c.is_strict_inequality())
+              neg_assign(row[0], Coefficient_one());
+          }
+          dimension_type i = 1;
+          Variables_Set::const_iterator pi = param_begin;
+
+          for ( ; pi != param_end; ++pi, ++i) {
+            if (*pi < c_space_dim) {
+              const Coefficient& x = c.coefficient(Variable(*pi));
+              if (x != 0)
+                row[i] = x;
+            } else
+              break;
+          }
+#endif // defined(PPL_SPARSE_BACKEND_SLOW_RANDOM_WRITES)
         }
 
         // If it is an equality, also insert its negation.




More information about the PPL-devel mailing list