Repository: systemml
Updated Branches:
  refs/heads/master 73e1e40d7 -> 17821d105


[SYSTEMML-2479] Fix and cleanup baseline estimators for chains of ops

Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/17821d10
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/17821d10
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/17821d10

Branch: refs/heads/master
Commit: 17821d10543c4373b4728068d1b79bdf9346a38f
Parents: 73e1e40
Author: Matthias Boehm <mboe...@gmail.com>
Authored: Mon Oct 22 23:00:03 2018 +0200
Committer: Matthias Boehm <mboe...@gmail.com>
Committed: Mon Oct 22 23:00:10 2018 +0200

----------------------------------------------------------------------
 .../apache/sysml/hops/estim/EstimatorBasicAvg.java   |  5 +++--
 .../apache/sysml/hops/estim/EstimatorBasicWorst.java |  9 +++++++--
 .../apache/sysml/hops/estim/EstimatorBitsetMM.java   |  9 +++------
 .../apache/sysml/hops/estim/EstimatorDensityMap.java | 15 ++++++---------
 .../sysml/hops/estim/EstimatorMatrixHistogram.java   |  2 +-
 .../java/org/apache/sysml/hops/estim/MMNode.java     |  8 ++++++++
 .../apache/sysml/hops/estim/SparsityEstimator.java   |  7 +++++++
 7 files changed, 35 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/17821d10/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicAvg.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicAvg.java 
b/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicAvg.java
index 10ff0f7..a84ac8c 100644
--- a/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicAvg.java
+++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicAvg.java
@@ -34,8 +34,9 @@ public class EstimatorBasicAvg extends SparsityEstimator
        public MatrixCharacteristics estim(MMNode root) {
                MatrixCharacteristics mc1 = !root.getLeft().isLeaf() ?
                        estim(root.getLeft()) : 
root.getLeft().getMatrixCharacteristics();
-               MatrixCharacteristics mc2 = !root.getRight().isLeaf() ?
-                       estim(root.getRight()) : 
root.getRight().getMatrixCharacteristics();
+               MatrixCharacteristics mc2 = root.getRight()==null ? null :
+                       !root.getRight().isLeaf() ? estim(root.getRight()) : 
+                       root.getRight().getMatrixCharacteristics();
                return root.setMatrixCharacteristics(
                        estimIntern(mc1, mc2, root.getOp()));
        }

http://git-wip-us.apache.org/repos/asf/systemml/blob/17821d10/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicWorst.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicWorst.java 
b/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicWorst.java
index 81877dd..777b486 100644
--- a/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicWorst.java
+++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorBasicWorst.java
@@ -36,10 +36,15 @@ public class EstimatorBasicWorst extends SparsityEstimator
 {
        @Override
        public MatrixCharacteristics estim(MMNode root) {
+               if (!root.getLeft().isLeaf())
+                       estim(root.getLeft()); // obtain synopsis
+               if (root.getRight()!=null && !root.getRight().isLeaf())
+                       estim(root.getRight()); // obtain synopsis
                MatrixCharacteristics mc1 = !root.getLeft().isLeaf() ?
                        estim(root.getLeft()) : 
root.getLeft().getMatrixCharacteristics();
-               MatrixCharacteristics mc2 = !root.getRight().isLeaf() ?
-                       estim(root.getRight()) : 
root.getRight().getMatrixCharacteristics();
+               MatrixCharacteristics mc2 = root.getRight()==null ? null :
+                       !root.getRight().isLeaf() ? estim(root.getRight()) : 
+                       root.getRight().getMatrixCharacteristics();
                return root.setMatrixCharacteristics(
                        estimIntern(mc1, mc2, root.getOp()));
        }

http://git-wip-us.apache.org/repos/asf/systemml/blob/17821d10/src/main/java/org/apache/sysml/hops/estim/EstimatorBitsetMM.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/estim/EstimatorBitsetMM.java 
b/src/main/java/org/apache/sysml/hops/estim/EstimatorBitsetMM.java
index 3d3c4f0..07d4cdc 100644
--- a/src/main/java/org/apache/sysml/hops/estim/EstimatorBitsetMM.java
+++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorBitsetMM.java
@@ -46,14 +46,11 @@ public class EstimatorBitsetMM extends SparsityEstimator
 {
        @Override
        public MatrixCharacteristics estim(MMNode root) {
-               // recursive density map computation of non-leaf nodes
-               if (!root.getLeft().isLeaf())
-                       estim(root.getLeft()); // obtain synopsis
-               if (!root.getRight().isLeaf())
-                       estim(root.getRight()); // obtain synopsis
+               estimateInputs(root);
                BitsetMatrix m1Map = !root.getLeft().isLeaf() ? (BitsetMatrix) 
root.getLeft().getSynopsis() :
                        new BitsetMatrix1(root.getLeft().getData());
-               BitsetMatrix m2Map = !root.getRight().isLeaf() ? (BitsetMatrix) 
root.getRight().getSynopsis() :
+               BitsetMatrix m2Map = root.getRight() == null ? null :
+                       !root.getRight().isLeaf() ? (BitsetMatrix) 
root.getRight().getSynopsis() :
                        new BitsetMatrix1(root.getRight().getData());
                BitsetMatrix outMap = estimInternal(m1Map, m2Map, root.getOp());
                root.setSynopsis(outMap); // memorize boolean matrix

http://git-wip-us.apache.org/repos/asf/systemml/blob/17821d10/src/main/java/org/apache/sysml/hops/estim/EstimatorDensityMap.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/estim/EstimatorDensityMap.java 
b/src/main/java/org/apache/sysml/hops/estim/EstimatorDensityMap.java
index e845a5b..e513937 100644
--- a/src/main/java/org/apache/sysml/hops/estim/EstimatorDensityMap.java
+++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorDensityMap.java
@@ -55,15 +55,12 @@ public class EstimatorDensityMap extends SparsityEstimator
        
        @Override
        public MatrixCharacteristics estim(MMNode root) {
-               //recursive density map computation of non-leaf nodes
-               if( !root.getLeft().isLeaf() )
-                       estim(root.getLeft()); //obtain synopsis
-               if( !root.getRight().isLeaf() )
-                       estim(root.getRight()); //obtain synopsis
+               estimateInputs(root);
                DensityMap m1Map = !root.getLeft().isLeaf() ?
                        (DensityMap)root.getLeft().getSynopsis() : 
                        new DensityMap(root.getLeft().getData(), _b);
-               DensityMap m2Map = !root.getRight().isLeaf() ?
+               DensityMap m2Map = root.getRight()==null ? null:
+                       !root.getRight().isLeaf() ? 
                        (DensityMap)root.getRight().getSynopsis() :
                        new DensityMap(root.getRight().getData(), _b);
                
@@ -71,7 +68,7 @@ public class EstimatorDensityMap extends SparsityEstimator
                DensityMap outMap = estimIntern(m1Map, m2Map, root.getOp());
                root.setSynopsis(outMap); //memoize density map
                return root.setMatrixCharacteristics(new MatrixCharacteristics(
-                       root.getLeft().getRows(), root.getRight().getCols(), 
outMap.getNonZeros()));
+                       outMap.getNumRowsOrig(), outMap.getNumColumnsOrig(), 
outMap.getNonZeros()));
        }
 
        @Override
@@ -230,7 +227,7 @@ public class EstimatorDensityMap extends SparsityEstimator
                        _map = init(in);
                        _scaled = false;
                        if( !isPow2(_b) )
-                               throw new RuntimeException("Invalid block size: 
"+_b);
+                               System.out.println("WARN: Invalid block size: 
"+_b);
                }
                
                public DensityMap(MatrixBlock map, int rlenOrig, int clenOrig, 
int b, boolean scaled) {
@@ -240,7 +237,7 @@ public class EstimatorDensityMap extends SparsityEstimator
                        _map = map;
                        _scaled = scaled;
                        if( !isPow2(_b) )
-                               throw new RuntimeException("Invalid block size: 
"+_b);
+                               System.out.println("WARN: Invalid block size: 
"+_b);
                }
                
                public MatrixBlock getMap() {

http://git-wip-us.apache.org/repos/asf/systemml/blob/17821d10/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java 
b/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java
index 34f9cac..22ff341 100644
--- a/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java
+++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java
@@ -59,7 +59,7 @@ public class EstimatorMatrixHistogram extends 
SparsityEstimator
        }
        
        private MatrixCharacteristics estim(MMNode root, boolean topLevel) {
-               //recursive histogram computation of non-leaf nodes
+               //NOTE: not estimateInputs due to handling of topLevel
                if( !root.getLeft().isLeaf() )
                        estim(root.getLeft(), false); //obtain synopsis
                if( root.getRight()!=null && !root.getRight().isLeaf() )

http://git-wip-us.apache.org/repos/asf/systemml/blob/17821d10/src/main/java/org/apache/sysml/hops/estim/MMNode.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/estim/MMNode.java 
b/src/main/java/org/apache/sysml/hops/estim/MMNode.java
index d508f82..12b1bce 100644
--- a/src/main/java/org/apache/sysml/hops/estim/MMNode.java
+++ b/src/main/java/org/apache/sysml/hops/estim/MMNode.java
@@ -68,6 +68,14 @@ public class MMNode
                this(left, null, op, misc);
        }
        
+       public void reset() {
+               if( _m1 != null )
+                       _m1.reset();
+               if( _m2 != null )
+                       _m2.reset();
+               _synops = null;
+       }
+       
        public int getRows() {
                return (int)_mc.getRows();
        }

http://git-wip-us.apache.org/repos/asf/systemml/blob/17821d10/src/main/java/org/apache/sysml/hops/estim/SparsityEstimator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/estim/SparsityEstimator.java 
b/src/main/java/org/apache/sysml/hops/estim/SparsityEstimator.java
index 2941959..45ed227 100644
--- a/src/main/java/org/apache/sysml/hops/estim/SparsityEstimator.java
+++ b/src/main/java/org/apache/sysml/hops/estim/SparsityEstimator.java
@@ -114,4 +114,11 @@ public abstract class SparsityEstimator
                                throw new HopsException("Opcode is not an exact 
meta data operation: "+op.name());
                }
        }
+       
+       protected void estimateInputs(MMNode root) {
+               if (!root.getLeft().isLeaf())
+                       estim(root.getLeft()); // obtain synopsis
+               if (root.getRight()!=null && !root.getRight().isLeaf())
+                       estim(root.getRight()); // obtain synopsis
+       }
 }

Reply via email to