You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2018/10/22 21:00:24 UTC

systemml git commit: [SYSTEMML-2479] Fix and cleanup baseline estimators for chains of ops

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 <mb...@gmail.com>
Authored: Mon Oct 22 23:00:03 2018 +0200
Committer: Matthias Boehm <mb...@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
+	}
 }