[PPL-devel] [GIT] ppl/ppl(master): MIP_Problem: work when Coefficient_traits:: const_reference is just Coefficient, losing some performance when it's not.

Marco Poletti poletti.marco at gmail.com
Sun Sep 5 08:52:36 CEST 2010


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

Author: Marco Poletti <poletti.marco at gmail.com>
Date:   Sun Sep  5 08:53:03 2010 +0200

MIP_Problem: work when Coefficient_traits::const_reference is just Coefficient, losing some performance when it's not.

---

 src/MIP_Problem.cc |   22 +++++++++++-----------
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/MIP_Problem.cc b/src/MIP_Problem.cc
index 15e7639..3d94007 100644
--- a/src/MIP_Problem.cc
+++ b/src/MIP_Problem.cc
@@ -1089,14 +1089,14 @@ PPL::MIP_Problem::steepest_edge_exact_entering_index() const {
     // Compute the lcm of all the coefficients of variables in base.
     PPL_DIRTY_TEMP_COEFFICIENT(lcm_basis);
     lcm_basis = 1;
-    std::vector<const Coefficient*> tableau_base(tableau_num_rows);
+    std::vector<Coefficient> tableau_base(tableau_num_rows);
     for (dimension_type i = tableau_num_rows; i-- > 0; ) {
-      tableau_base[i] = &(tableau[i].get(base[i]));
-      lcm_assign(lcm_basis, lcm_basis, *(tableau_base[i]));
+      tableau_base[i] = tableau[i].get(base[i]);
+      lcm_assign(lcm_basis, lcm_basis, tableau_base[i]);
     }
     // Compute normalization factors.
     for (dimension_type i = tableau_num_rows; i-- > 0; )
-      exact_div_assign(norm_factor[i], lcm_basis, *(tableau_base[i]));
+      exact_div_assign(norm_factor[i], lcm_basis, tableau_base[i]);
     // Compute the square of `lcm_basis', exploiting the fact that
     // `lcm_basis' will no longer be needed.
     lcm_basis *= lcm_basis;
@@ -1471,8 +1471,8 @@ PPL::MIP_Problem
   // These pointers are used instead of references in the following loop, to
   // improve performance.
   const matrix_type::row_type* t_e = &(tableau[exiting_base_index]);
-  const Coefficient* t_e0 = &(t_e->get(0));
-  const Coefficient* t_ee = &(t_e->get(entering_var_index));
+  Coefficient t_e0 = t_e->get(0);
+  Coefficient t_ee = t_e->get(entering_var_index);
   for (dimension_type i = exiting_base_index + 1; i < tableau_num_rows; ++i) {
     const matrix_type::row_type& t_i = tableau[i];
     Coefficient_traits::const_reference t_ie = t_i.get(entering_var_index);
@@ -1480,9 +1480,9 @@ PPL::MIP_Problem
     const int t_ie_sign = sgn(t_ie);
     if (t_ie_sign != 0 && t_ie_sign == sgn(t_ib)) {
       WEIGHT_BEGIN();
-      lcm_assign(lcm, *t_ee, t_ie);
-      exact_div_assign(current_min, lcm, *t_ee);
-      current_min *= *t_e0;
+      lcm_assign(lcm, t_ee, t_ie);
+      exact_div_assign(current_min, lcm, t_ee);
+      current_min *= t_e0;
       abs_assign(current_min);
       exact_div_assign(challenger, lcm, t_ie);
       challenger *= t_i.get(0);
@@ -1493,8 +1493,8 @@ PPL::MIP_Problem
           || (sign == 0 && base[i] < base[exiting_base_index])) {
         exiting_base_index = i;
         t_e = &(tableau[exiting_base_index]);
-        t_e0 = &(t_e->get(0));
-        t_ee = &(t_e->get(entering_var_index));
+        t_e0 = t_e->get(0);
+        t_ee = t_e->get(entering_var_index);
       }
       WEIGHT_ADD(1044);
     }




More information about the PPL-devel mailing list