[PPL-devel] [GIT] ppl/ppl(sparse_matrices): PIP_Solution_Node: optimize solve() method for sparse matrices.

Marco Poletti poletti.marco at gmail.com
Tue May 11 08:59:13 CEST 2010


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

Author: Marco Poletti <poletti.marco at gmail.com>
Date:   Mon May 10 21:32:55 2010 +0200

PIP_Solution_Node: optimize solve() method for sparse matrices.

---

 src/PIP_Tree.cc |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index b6683c8..57f1eb0 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -2767,8 +2767,10 @@ PIP_Solution_Node::solve(const PIP_Problem& pip,
               }
               PPL_ASSERT(product % s_pivot_pj == 0);
               exact_div_assign(product, product, s_pivot_pj);
-              s_i.find_create_hint_assign(j->first, itr);
-              itr->second -= product;
+              if (product != 0) {
+                s_i.find_create_hint_assign(j->first, itr);
+                itr->second -= product;
+              }
             }
           }
         }
@@ -2793,7 +2795,8 @@ PIP_Solution_Node::solve(const PIP_Problem& pip,
               }
               PPL_ASSERT(product % s_pivot_pj == 0);
               exact_div_assign(product, product, s_pivot_pj);
-              s_i[j->first] -= product;
+              if (product != 0)
+                s_i[j->first] -= product;
             }
           }
         }
@@ -2868,8 +2871,10 @@ PIP_Solution_Node::solve(const PIP_Problem& pip,
             }
             PPL_ASSERT(product % s_pivot_pj == 0);
             exact_div_assign(product, product, s_pivot_pj);
-            t_i.find_create_hint_assign(j->first, k);
-            k->second -= product;
+            if (product != 0) {
+              t_i.find_create_hint_assign(j->first, k);
+              k->second -= product;
+            }
 
             // Update row sign.
             Row_Sign& sign_i = sign[i];
@@ -2912,7 +2917,8 @@ PIP_Solution_Node::solve(const PIP_Problem& pip,
             }
             PPL_ASSERT(product % s_pivot_pj == 0);
             exact_div_assign(product, product, s_pivot_pj);
-            t_i[j->first] -= product;
+            if (product != 0)
+              t_i[j->first] -= product;
 
             // Update row sign.
             Row_Sign& sign_i = sign[i];




More information about the PPL-devel mailing list