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/20 18:28:15 UTC

systemml git commit: [SYSTEMML-2479] Fix MNC sparsity estimator reshape operations

Repository: systemml
Updated Branches:
  refs/heads/master bd34292d4 -> 07650acf2


[SYSTEMML-2479] Fix MNC sparsity estimator reshape operations

This patch fixes various smaller correctness issues of MNC sketch
propagation for reshape operations, adds a related test, and finally
removes the invalid skipping of estimation tests.


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

Branch: refs/heads/master
Commit: 07650acf25a7ffb3d9663c622be0ae82778c0db0
Parents: bd34292
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sat Oct 20 20:25:29 2018 +0200
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sat Oct 20 20:27:16 2018 +0200

----------------------------------------------------------------------
 .../sysml/hops/estim/EstimatorBitsetMM.java     |  1 -
 .../hops/estim/EstimatorMatrixHistogram.java    | 52 ++++++------
 .../org/apache/sysml/hops/estim/MMNode.java     | 28 ++++++-
 .../functions/estim/MNCReshapeTest.java         | 83 ++++++++++++++++++++
 .../functions/estim/OpBindChainTest.java        |  3 -
 .../integration/functions/estim/OpBindTest.java |  3 -
 .../functions/estim/OpElemWChainTest.java       |  3 -
 .../functions/estim/OpElemWTest.java            |  3 -
 .../functions/estim/OpSingleTest.java           |  3 -
 .../functions/estim/OuterProductTest.java       |  3 -
 .../functions/estim/SelfProductTest.java        |  3 -
 .../estim/SquaredProductChainTest.java          |  3 -
 .../functions/estim/SquaredProductTest.java     |  3 -
 .../functions/estim/ZPackageSuite.java          |  1 +
 14 files changed, 140 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/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 8802e9c..99354fd 100644
--- a/src/main/java/org/apache/sysml/hops/estim/EstimatorBitsetMM.java
+++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorBitsetMM.java
@@ -406,7 +406,6 @@ public class EstimatorBitsetMM extends SparsityEstimator
 		}
 	}
 	
-	@SuppressWarnings("unused")
 	public static class BitsetMatrix2 extends BitsetMatrix {
 		private BitSet[] _data;
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/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 52cca3d..83d918a 100644
--- a/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java
+++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java
@@ -24,7 +24,7 @@ import java.util.Random;
 import java.util.stream.IntStream;
 
 import org.apache.commons.lang.ArrayUtils;
-import org.apache.directory.api.util.exception.NotImplementedException;
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.sysml.hops.OptimizerUtils;
 import org.apache.sysml.runtime.matrix.MatrixCharacteristics;
 import org.apache.sysml.runtime.matrix.data.DenseBlock;
@@ -58,22 +58,22 @@ public class EstimatorMatrixHistogram extends SparsityEstimator
 		//recursive histogram computation of non-leaf nodes
 		if( !root.getLeft().isLeaf() )
 			estim(root.getLeft()); //obtain synopsis
-		if( !root.getRight().isLeaf() )
+		if( root.getRight()!=null && !root.getRight().isLeaf() )
 			estim(root.getRight()); //obtain synopsis
 		MatrixHistogram h1 = !root.getLeft().isLeaf() ?
 			(MatrixHistogram)root.getLeft().getSynopsis() :
 			new MatrixHistogram(root.getLeft().getData(), _useExcepts);
-		MatrixHistogram h2 = !root.getRight().isLeaf() ?
+		MatrixHistogram h2 = root.getRight() != null ? !root.getRight().isLeaf() ?
 			(MatrixHistogram)root.getRight().getSynopsis() :
-			new MatrixHistogram(root.getRight().getData(), _useExcepts);
+			new MatrixHistogram(root.getRight().getData(), _useExcepts) : null;
 		
 		//estimate output sparsity based on input histograms
-		double ret = estimIntern(h1, h2, root.getOp());
-		MatrixHistogram outMap = MatrixHistogram.deriveOutputHistogram(h1, h2, ret, root.getOp());
+		double ret = estimIntern(h1, h2, root.getOp(), root.getMisc());
+		MatrixHistogram outMap = MatrixHistogram
+			.deriveOutputHistogram(h1, h2, ret, root.getOp(), root.getMisc());
 		root.setSynopsis(outMap);
 		return root.setMatrixCharacteristics(new MatrixCharacteristics(
 			outMap.getRows(), outMap.getCols(), outMap.getNonZeros()));
-
 	}
 	
 	@Override 
@@ -89,7 +89,7 @@ public class EstimatorMatrixHistogram extends SparsityEstimator
 		MatrixHistogram h1 = new MatrixHistogram(m1, _useExcepts);
 		MatrixHistogram h2 = (m1 == m2) ? //self product
 			h1 : new MatrixHistogram(m2, _useExcepts);
-		return estimIntern(h1, h2, op);
+		return estimIntern(h1, h2, op, null);
 	}
 	
 	@Override
@@ -97,10 +97,10 @@ public class EstimatorMatrixHistogram extends SparsityEstimator
 		if( isExactMetadataOp(op) )
 			return estimExactMetaData(m1.getMatrixCharacteristics(), null, op).getSparsity();
 		MatrixHistogram h1 = new MatrixHistogram(m1, _useExcepts);
-		return estimIntern(h1, null, op);
+		return estimIntern(h1, null, op, null);
 	}
 	
-	private double estimIntern(MatrixHistogram h1, MatrixHistogram h2, OpCode op) {
+	private double estimIntern(MatrixHistogram h1, MatrixHistogram h2, OpCode op, long[] misc) {
 		double msize = (double)h1.getRows()*h1.getCols();
 		switch (op) {
 			case MM:
@@ -312,13 +312,21 @@ public class EstimatorMatrixHistogram extends SparsityEstimator
 			return cNnz.length;
 		}
 		
+		public int[] getRowCounts() {
+			return rNnz;
+		}
+		
+		public int[] getColCounts() {
+			return cNnz;
+		}
+		
 		public long getNonZeros() {
 			return getRows() < getCols() ?
 				IntStream.range(0, getRows()).mapToLong(i-> rNnz[i]).sum() :
 				IntStream.range(0, getCols()).mapToLong(i-> cNnz[i]).sum();
 		}
 		
-		public static MatrixHistogram deriveOutputHistogram(MatrixHistogram h1, MatrixHistogram h2, double spOut, OpCode op) {
+		public static MatrixHistogram deriveOutputHistogram(MatrixHistogram h1, MatrixHistogram h2, double spOut, OpCode op, long[] misc) {
 			switch(op) {
 				case MM:      return deriveMMHistogram(h1, h2, spOut);
 				case MULT:    return deriveMultHistogram(h1, h2);
@@ -329,8 +337,7 @@ public class EstimatorMatrixHistogram extends SparsityEstimator
 				case EQZERO:  return deriveEq0Histogram(h1);
 				case DIAG:    return deriveDiagHistogram(h1);
 				case TRANS:   return deriveTransHistogram(h1);
-				case RESHAPE: return deriveReshapeHistogram(h1, h1.getRows(), h1.getCols());
-				//FIXME: reshape requires additional meta data from MM node
+				case RESHAPE: return deriveReshapeHistogram(h1, (int)misc[0], (int)misc[1]);
 				default:
 					throw new NotImplementedException();
 			}
@@ -493,11 +500,10 @@ public class EstimatorMatrixHistogram extends SparsityEstimator
 					rMaxNnz = Math.max(rMaxNnz, h1.rNnz[i]/scale);
 				}
 				//aggregate column counts
-				for(int j=0; j<n; j+=scale)
-					for(int j2=0; j2<scale; j2++)
-						cNnz[j2] += h1.cNnz[j];
-				for(int j2=0; j2<scale; j2++)
-					cMaxNnz = Math.max(cMaxNnz, cNnz[j2]);
+				for(int j=0; j<n; j++)
+					cNnz[j%cols] += h1.cNnz[j];
+				for(int j=0; j<cols; j++)
+					cMaxNnz = Math.max(cMaxNnz, cNnz[j]);
 			}
 			else if ( h1.getRows() % rows == 0 ) { //N->1 rows
 				int scale = h1.getRows()/rows;
@@ -508,11 +514,11 @@ public class EstimatorMatrixHistogram extends SparsityEstimator
 					cMaxNnz = Math.max(cMaxNnz, h1.cNnz[i]/scale);
 				}
 				//aggregate row counts
-				for(int j=0; j<m; j+=scale)
-					for(int j2=0; j2<scale; j2++)
-						rNnz[j2] += h1.rNnz[j];
-				for(int j2=0; j2<scale; j2++)
-					rMaxNnz = Math.max(rMaxNnz, rNnz[j2]);
+				for(int i=0, pos=0; i<m; i+=scale, pos++)
+					for(int i2=0; i2<scale; i2++)
+						rNnz[pos] += h1.rNnz[i+i2];
+				for(int i=0; i<rows; i++)
+					rMaxNnz = Math.max(rMaxNnz, rNnz[i]);
 			}
 			return new MatrixHistogram(rNnz, null, cNnz, null, rMaxNnz, cMaxNnz);
 		}

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/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 542449a..d508f82 100644
--- a/src/main/java/org/apache/sysml/hops/estim/MMNode.java
+++ b/src/main/java/org/apache/sysml/hops/estim/MMNode.java
@@ -20,6 +20,7 @@
 package org.apache.sysml.hops.estim;
 
 import org.apache.sysml.hops.estim.SparsityEstimator.OpCode;
+import org.apache.sysml.runtime.DMLRuntimeException;
 import org.apache.sysml.runtime.matrix.MatrixCharacteristics;
 import org.apache.sysml.runtime.matrix.data.MatrixBlock;
 
@@ -35,6 +36,7 @@ public class MMNode
 	private final MatrixCharacteristics _mc;
 	private Object _synops = null;
 	private final OpCode _op;
+	private final long[] _misc;
 	
 	public MMNode(MatrixBlock in) {
 		_m1 = null;
@@ -42,14 +44,28 @@ public class MMNode
 		_data = in;
 		_mc = in.getMatrixCharacteristics();
 		_op = null;
+		_misc = null;
 	}
 	
-	public MMNode(MMNode left, MMNode right, OpCode op) {
+	public MMNode(MMNode left, MMNode right, OpCode op, long[] misc) {
 		_m1 = left;
 		_m2 = right;
 		_data = null;
 		_mc = new MatrixCharacteristics(-1, -1, -1, -1);
 		_op = op;
+		_misc = misc;
+	}
+	
+	public MMNode(MMNode left, MMNode right, OpCode op) {
+		this(left, right, op, null);
+	}
+	
+	public MMNode(MMNode left, OpCode op) {
+		this(left, null, op);
+	}
+	
+	public MMNode(MMNode left, OpCode op, long[] misc) {
+		this(left, null, op, misc);
 	}
 	
 	public int getRows() {
@@ -60,6 +76,16 @@ public class MMNode
 		return (int)_mc.getCols();
 	}
 	
+	public long[] getMisc() {
+		return _misc;
+	}
+	
+	public long getMisc(int pos) {
+		if( _misc == null )
+			throw new DMLRuntimeException("Extra meta data not available.");
+		return _misc[pos];
+	}
+	
 	public MatrixCharacteristics getMatrixCharacteristics() {
 		return _mc;
 	}

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/MNCReshapeTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/MNCReshapeTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/MNCReshapeTest.java
new file mode 100644
index 0000000..7e9b1a5
--- /dev/null
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/MNCReshapeTest.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sysml.test.integration.functions.estim;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.apache.sysml.hops.estim.EstimatorMatrixHistogram.MatrixHistogram;
+import org.apache.sysml.hops.estim.SparsityEstimator.OpCode;
+import org.apache.sysml.runtime.matrix.data.LibMatrixReorg;
+import org.apache.sysml.runtime.matrix.data.MatrixBlock;
+import org.apache.sysml.test.integration.AutomatedTestBase;
+
+public class MNCReshapeTest extends AutomatedTestBase 
+{
+	@Override
+	public void setUp() {
+		//do  nothing
+	}
+	
+	@Test
+	public void testMNCReshapeN1() {
+		runMNCReshapeTest(1000, 100, 200, 500);
+	}
+	
+	@Test
+	public void testMNCReshape1N() {
+		runMNCReshapeTest(100, 1000, 500, 200);
+	}
+
+	private void runMNCReshapeTest(int m, int n, int m2, int n2) {
+		MatrixBlock in = createStructuredInput(m, n, m2, n2);
+		MatrixBlock out = LibMatrixReorg.reshape(in, new MatrixBlock(m2, n2, false), m2, n2, true);
+		
+		MatrixHistogram hIn = new MatrixHistogram(in, false);
+		MatrixHistogram hOut = MatrixHistogram.deriveOutputHistogram(
+			hIn, null, in.getSparsity(), OpCode.RESHAPE, new long[] {m2,n2});
+		
+		MatrixHistogram hExpect = new MatrixHistogram(out, false);
+		
+		//expected exact sparsity, even with sketch propagation
+		if( m % m2 == 0 )
+			Assert.assertArrayEquals(hExpect.getRowCounts(), hOut.getRowCounts());
+		if( n % n2 == 0 )
+			Assert.assertArrayEquals(hExpect.getColCounts(), hOut.getColCounts());
+	}
+	
+	private MatrixBlock createStructuredInput(int m, int n, int m2, int n2) {
+		if( n % n2 == 0  ) { //1:N
+			MatrixBlock tmp = createStructuredInput(n, m, n2, m2);
+			return LibMatrixReorg.transpose(tmp, new MatrixBlock(m, n, false));
+		}
+		else if( m % m2 == 0 ) { //N:1
+			MatrixBlock tmp = new MatrixBlock(m, n, false);
+			int L = m/m2;
+			for(int i=0; i<m; i+=L) {
+				for( int k=0; k<L; k++ )
+					for(int j=0; j<n/(k+1); j++ ) //j=i/100
+						tmp.quickSetValue(i+k, j, 1);
+			}
+			return tmp;
+		}
+		else {
+			throw new RuntimeException("Unsupported general case.");
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindChainTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindChainTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindChainTest.java
index 38d7164..2d87e21 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindChainTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindChainTest.java
@@ -124,9 +124,6 @@ public class OpBindChainTest extends AutomatedTestBase
 	
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, int n, double[] sp, OpCode op) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1;
 		MatrixBlock m2;
 		MatrixBlock m3 = new MatrixBlock();

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindTest.java
index 03a823d..c04458b 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindTest.java
@@ -134,9 +134,6 @@ public class OpBindTest extends AutomatedTestBase
 	
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, int n, double[] sp, OpCode op) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1;
 		MatrixBlock m2;
 		MatrixBlock m3 = new MatrixBlock();

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWChainTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWChainTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWChainTest.java
index b784915..6d69b69 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWChainTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWChainTest.java
@@ -118,9 +118,6 @@ public class OpElemWChainTest extends AutomatedTestBase
 	
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int n, double[] sp, OpCode op) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1 = MatrixBlock.randOperations(m, n, sp[0], 1, 1, "uniform", 3);
 		MatrixBlock m2 = MatrixBlock.randOperations(m, n, sp[1], 1, 1, "uniform", 5);
 		MatrixBlock m3 = MatrixBlock.randOperations(n, m, sp[1], 1, 1, "uniform", 7);

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWTest.java
index 9df813b..69a7325 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWTest.java
@@ -129,9 +129,6 @@ public class OpElemWTest extends AutomatedTestBase
 	}
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int n, double[] sp, OpCode op) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1 = MatrixBlock.randOperations(m, n, sp[0], 1, 1, "uniform", 3);
 		MatrixBlock m2 = MatrixBlock.randOperations(m, n, sp[1], 1, 1, "uniform", 7);
 		MatrixBlock m3 = new MatrixBlock();

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingleTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingleTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingleTest.java
index fab3e19..fa567ed 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingleTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingleTest.java
@@ -232,9 +232,6 @@ public class OpSingleTest extends AutomatedTestBase
 //	}
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, double sp, OpCode op) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1 = MatrixBlock.randOperations(m, k, sp, 1, 1, "uniform", 3);
 		MatrixBlock m2 = new MatrixBlock();
 		double est = 0;

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/OuterProductTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/OuterProductTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/OuterProductTest.java
index f23ee2e..70ea63b 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/OuterProductTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OuterProductTest.java
@@ -140,9 +140,6 @@ public class OuterProductTest extends AutomatedTestBase
 	}
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, int n, double[] sp) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1 = MatrixBlock.randOperations(m, k, sp[0], 1, 1, "uniform", 3);
 		MatrixBlock m2 = MatrixBlock.randOperations(k, n, sp[1], 1, 1, "uniform", 3);
 		MatrixBlock m3 = m1.aggregateBinaryOperations(m1, m2, 

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/SelfProductTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/SelfProductTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/SelfProductTest.java
index d46f55b..702514e 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/SelfProductTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/SelfProductTest.java
@@ -141,9 +141,6 @@ public class SelfProductTest extends AutomatedTestBase
 	}
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int n, double sp) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1 = MatrixBlock.randOperations(m, n, sp, 1, 1, "uniform", 3);
 		MatrixBlock m3 = m1.aggregateBinaryOperations(m1, m1, 
 			new MatrixBlock(), InstructionUtils.getMatMultOperator(1));

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductChainTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductChainTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductChainTest.java
index aae753e..7d97150 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductChainTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductChainTest.java
@@ -138,9 +138,6 @@ public class SquaredProductChainTest extends AutomatedTestBase
 	}
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, int n, int n2, double[] sp) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1 = MatrixBlock.randOperations(m, k, sp[0], 1, 1, "uniform", 1);
 		MatrixBlock m2 = MatrixBlock.randOperations(k, n, sp[1], 1, 1, "uniform", 2);
 		MatrixBlock m3 = MatrixBlock.randOperations(n, n2, sp[2], 1, 1, "uniform", 3);

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductTest.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductTest.java
index 7269612..51eb5d6 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/SquaredProductTest.java
@@ -156,9 +156,6 @@ public class SquaredProductTest extends AutomatedTestBase
 	}
 	
 	private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, int n, double[] sp) {
-		if(shouldSkipTest())
-			return;
-		
 		MatrixBlock m1 = MatrixBlock.randOperations(m, k, sp[0], 1, 1, "uniform", 3);
 		MatrixBlock m2 = MatrixBlock.randOperations(k, n, sp[1], 1, 1, "uniform", 7);
 		MatrixBlock m3 = m1.aggregateBinaryOperations(m1, m2, 

http://git-wip-us.apache.org/repos/asf/systemml/blob/07650acf/src/test_suites/java/org/apache/sysml/test/integration/functions/estim/ZPackageSuite.java
----------------------------------------------------------------------
diff --git a/src/test_suites/java/org/apache/sysml/test/integration/functions/estim/ZPackageSuite.java b/src/test_suites/java/org/apache/sysml/test/integration/functions/estim/ZPackageSuite.java
index 3cf152b..4a77ab5 100644
--- a/src/test_suites/java/org/apache/sysml/test/integration/functions/estim/ZPackageSuite.java
+++ b/src/test_suites/java/org/apache/sysml/test/integration/functions/estim/ZPackageSuite.java
@@ -26,6 +26,7 @@ import org.junit.runners.Suite;
  *  won't run two of them at once. */
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
+	MNCReshapeTest.class,
 	OpBindChainTest.class,
 	OpBindTest.class,
 	OpElemWChainTest.class,