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 + } }