Repository: systemml Updated Branches: refs/heads/master 9ae0a9167 -> b7f569bd0
[SYSTEMML-2479] Fix MNC estimator (nnz, op, plus), incl various tests Closes #823. Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/b7f569bd Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/b7f569bd Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/b7f569bd Branch: refs/heads/master Commit: b7f569bd001c0799430857e4d00af69da93c691d Parents: 9ae0a91 Author: Johanna Sommer <[email protected]> Authored: Wed Aug 8 23:13:19 2018 -0700 Committer: Matthias Boehm <[email protected]> Committed: Wed Aug 8 23:13:20 2018 -0700 ---------------------------------------------------------------------- .../sysml/hops/estim/EstimatorDensityMap.java | 2 +- .../hops/estim/EstimatorMatrixHistogram.java | 27 +- .../hops/rewrite/RewriteGPUSpecificOps.java | 1 + .../integration/functions/estim/OpBindTest.java | 159 ++++++++++++ .../functions/estim/OpElemWTest.java | 161 ++++++++++++ .../integration/functions/estim/OpSingle.java | 252 +++++++++++++++++++ .../functions/estim/ZPackageSuite.java | 3 + 7 files changed, 593 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/b7f569bd/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 d752fe7..66c5826 100644 --- a/src/main/java/org/apache/sysml/hops/estim/EstimatorDensityMap.java +++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorDensityMap.java @@ -83,7 +83,7 @@ public class EstimatorDensityMap extends SparsityEstimator DensityMap m1Map = new DensityMap(m1, _b); DensityMap m2Map = (m1 == m2) ? //self product m1Map : new DensityMap(m2, _b); - DensityMap outMap = estimIntern(m1Map, m2Map, OpCode.MM); + DensityMap outMap = estimIntern(m1Map, m2Map, op); return OptimizerUtils.getSparsity( //aggregate output histogram outMap.getNumRowsOrig(), outMap.getNumColumnsOrig(), outMap.getNonZeros()); } http://git-wip-us.apache.org/repos/asf/systemml/blob/b7f569bd/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 637c7f3..a299c45 100644 --- a/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java +++ b/src/main/java/org/apache/sysml/hops/estim/EstimatorMatrixHistogram.java @@ -97,23 +97,28 @@ public class EstimatorMatrixHistogram extends SparsityEstimator private double estimIntern(MatrixHistogram h1, MatrixHistogram h2, OpCode op) { double msize = (double)h1.getRows()*h1.getCols(); - switch (op) { case MM: return estimInternMM(h1, h2); - case MULT: + case MULT: { final long N1 = h1.getNonZeros(); final long N2 = h2.getNonZeros(); final long scale = IntStream.range(0, h1.getCols()) .mapToLong(j -> (long)h1.cNnz[j] * h2.cNnz[j]).sum(); - return IntStream.range(0, h1.getRows()).mapToLong( - i -> (long)h1.rNnz[i] * h2.rNnz[i] * scale / N1 / N2).sum() / msize; - case PLUS: - return Math.min( - IntStream.range(0, h1.getRows()).mapToDouble(i -> h1.rNnz[i]/msize - + h2.rNnz[i]/msize - h1.rNnz[i]/msize * h2.rNnz[i]/msize).sum(), - IntStream.range(0, h1.getCols()).mapToDouble(i -> h1.cNnz[i]/msize - + h2.cNnz[i]/msize - h1.cNnz[i]/msize * h2.cNnz[i]/msize).sum()); + return IntStream.range(0, h1.getRows()) + .mapToLong(i -> (long)h1.rNnz[i] * h2.rNnz[i] * scale / N1 / N2) //collisions + .sum() / msize; + } + case PLUS: { + final long N1 = h1.getNonZeros(); + final long N2 = h2.getNonZeros(); + final long scale = IntStream.range(0, h1.getCols()) + .mapToLong(j -> (long)h1.cNnz[j] * h2.cNnz[j]).sum(); + return IntStream.range(0, h1.getRows()) + .mapToLong(i -> (long)h1.rNnz[i] + h2.rNnz[i] //all minus collisions + - (long)h1.rNnz[i] * h2.rNnz[i] * scale / N1 / N2) + .sum() / msize; + } case EQZERO: return OptimizerUtils.getSparsity(h1.getRows(), h1.getCols(), (long)h1.getRows() * h1.getCols() - h1.getNonZeros()); @@ -301,7 +306,7 @@ public class EstimatorMatrixHistogram extends SparsityEstimator public long getNonZeros() { return getRows() < getCols() ? IntStream.range(0, getRows()).mapToLong(i-> rNnz[i]).sum() : - IntStream.range(0, getRows()).mapToLong(i-> cNnz[i]).sum(); + IntStream.range(0, getCols()).mapToLong(i-> cNnz[i]).sum(); } public static MatrixHistogram deriveOutputHistogram(MatrixHistogram h1, MatrixHistogram h2, double spOut, OpCode op) { http://git-wip-us.apache.org/repos/asf/systemml/blob/b7f569bd/src/main/java/org/apache/sysml/hops/rewrite/RewriteGPUSpecificOps.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteGPUSpecificOps.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteGPUSpecificOps.java index 1ee23f8..2a1699d 100644 --- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteGPUSpecificOps.java +++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteGPUSpecificOps.java @@ -566,6 +566,7 @@ public class RewriteGPUSpecificOps extends HopRewriteRule { * @param pos position * @return a new FunctionOp or hi */ + @SuppressWarnings("unused") private static Hop batchNormTrain(ArrayList<Hop> roots, Hop parent, Hop hi, int pos) { // norm = bias_multiply(bias_add(X, -mean), 1/sqrt(var+eps)) http://git-wip-us.apache.org/repos/asf/systemml/blob/b7f569bd/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 new file mode 100644 index 0000000..a8f9e49 --- /dev/null +++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpBindTest.java @@ -0,0 +1,159 @@ +/* + * 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.Test; +import org.apache.commons.lang.NotImplementedException; +import org.apache.sysml.hops.estim.EstimatorBasicAvg; +import org.apache.sysml.hops.estim.EstimatorBasicWorst; +import org.apache.sysml.hops.estim.EstimatorMatrixHistogram; +import org.apache.sysml.hops.estim.SparsityEstimator; +import org.apache.sysml.hops.estim.SparsityEstimator.OpCode; +import org.apache.sysml.runtime.matrix.data.MatrixBlock; +import org.apache.sysml.test.integration.AutomatedTestBase; +import org.apache.sysml.test.utils.TestUtils; + +/** + * this is the basic operation check for all estimators with single operations + */ +public class OpBindTest extends AutomatedTestBase +{ + private final static int m = 600; + private final static int k = 300; + private final static int n = 100; + private final static double[] sparsity = new double[]{0.2, 0.4}; +// private final static OpCode mult = OpCode.MULT; +// private final static OpCode plus = OpCode.PLUS; + private final static OpCode rbind = OpCode.RBIND; + private final static OpCode cbind = OpCode.CBIND; +// private final static OpCode eqzero = OpCode.EQZERO; +// private final static OpCode diag = OpCode.DIAG; +// private final static OpCode neqzero = OpCode.NEQZERO; +// private final static OpCode trans = OpCode.TRANS; +// private final static OpCode reshape = OpCode.RESHAPE; + + @Override + public void setUp() { + //do nothing + } + + //Average Case + @Test + public void testAvgRbind() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, k, n, sparsity, rbind); + } + + @Test + public void testAvgCbind() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, k, n, sparsity, cbind); + } + + //Worst Case + @Test + public void testWorstRbind() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, k, n, sparsity, rbind); + } + + @Test + public void testWorstCbind() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, k, n, sparsity, cbind); + } + + //DensityMap + /*@Test + public void testDMCaserbind() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, n, sparsity, rbind); + } + + @Test + public void testDMCasecbind() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, n, sparsity, cbind); + }*/ + + //MNC + @Test + public void testMNCRbind() { + runSparsityEstimateTest(new EstimatorMatrixHistogram(), m, k, n, sparsity, rbind); + } + + @Test + public void testMNCCbind() { + runSparsityEstimateTest(new EstimatorMatrixHistogram(), m, k, n, sparsity, cbind); + } + + //Bitset + /*@Test + public void testBitsetCaserbind() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, n, sparsity, rbind); + } + + @Test + public void testBitsetCasecbind() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, n, sparsity, cbind); + } + + //Layered Graph + @Test + public void testLGCaserbind() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, n, sparsity, rbind); + } + + @Test + public void testLGCasecbind() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, n, sparsity, cbind); + } + + //Sample + @Test + public void testSampleCaserbind() { + runSparsityEstimateTest(new EstimatorSample(), m, k, n, sparsity, rbind); + } + + @Test + public void testSampleCasecbind() { + runSparsityEstimateTest(new EstimatorSample(), m, k, n, sparsity, cbind); + }*/ + + + private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, int n, double[] sp, OpCode op) { + MatrixBlock m1; + MatrixBlock m2; + MatrixBlock m3 = new MatrixBlock(); + double est = 0; + switch(op) { + case RBIND: + m1 = MatrixBlock.randOperations(m, k, sp[0], 1, 1, "uniform", 3); + m2 = MatrixBlock.randOperations(n, k, sp[1], 1, 1, "uniform", 3); + m1.append(m2, m3, false); + est = estim.estim(m1, m2, op); + break; + case CBIND: + m1 = MatrixBlock.randOperations(m, k, sp[0], 1, 1, "uniform", 3); + m2 = MatrixBlock.randOperations(m, n, sp[1], 1, 1, "uniform", 3); + m1.append(m2, m3); + est = estim.estim(m1, m2, op); + break; + default: + throw new NotImplementedException(); + } + //compare estimated and real sparsity + TestUtils.compareScalars(est, m3.getSparsity(), (estim instanceof EstimatorBasicWorst) ? 5e-1 : 1e-2); + } +} http://git-wip-us.apache.org/repos/asf/systemml/blob/b7f569bd/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 new file mode 100644 index 0000000..29cd607 --- /dev/null +++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpElemWTest.java @@ -0,0 +1,161 @@ +/* + * 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.Test; +import org.apache.sysml.runtime.matrix.operators.BinaryOperator; +import org.apache.commons.lang.NotImplementedException; +import org.apache.sysml.hops.estim.EstimatorBasicAvg; +import org.apache.sysml.hops.estim.EstimatorBasicWorst; +import org.apache.sysml.hops.estim.EstimatorDensityMap; +import org.apache.sysml.hops.estim.EstimatorMatrixHistogram; +import org.apache.sysml.hops.estim.SparsityEstimator; +import org.apache.sysml.hops.estim.SparsityEstimator.OpCode; +import org.apache.sysml.runtime.functionobjects.Multiply; +import org.apache.sysml.runtime.functionobjects.Plus; +import org.apache.sysml.runtime.matrix.data.MatrixBlock; +import org.apache.sysml.test.integration.AutomatedTestBase; +import org.apache.sysml.test.utils.TestUtils; + +/** + * this is the basic operation check for all estimators with single operations + */ +public class OpElemWTest extends AutomatedTestBase +{ + //TODO experiment with m>2n for MNC (currently suboptimal accuracy) + private final static int m = 600; + private final static int n = 700; + private final static double[] sparsity = new double[]{0.1, 0.04}; + private final static OpCode mult = OpCode.MULT; + private final static OpCode plus = OpCode.PLUS; +// private final static OpCode rbind = OpCode.RBIND; +// private final static OpCode cbind = OpCode.CBIND; +// private final static OpCode eqzero = OpCode.EQZERO; +// private final static OpCode diag = OpCode.DIAG; +// private final static OpCode neqzero = OpCode.NEQZERO; +// private final static OpCode trans = OpCode.TRANS; +// private final static OpCode reshape = OpCode.RESHAPE; + + @Override + public void setUp() { + //do nothing + } + //Average Case + @Test + public void testAvgMult() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, n, sparsity, mult); + } + + @Test + public void testAvgPlus() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, n, sparsity, plus); + } + + //Worst Case + @Test + public void testWorstMult() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, n, sparsity, mult); + } + + @Test + public void testWorstPlus() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, n, sparsity, plus); + } + + //DensityMap + @Test + public void testDMMult() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, n, sparsity, mult); + } + + @Test + public void testDMPlus() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, n, sparsity, plus); + } + + //MNC + @Test + public void testMNCMult() { + runSparsityEstimateTest(new EstimatorMatrixHistogram(), m, n, sparsity, mult); + } + + @Test + public void testMNCPlus() { + runSparsityEstimateTest(new EstimatorMatrixHistogram(), m, n, sparsity, plus); + } + + //Bitset + /*@Test + public void testBitsetCasemult() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, n, sparsity, mult); + } + + @Test + public void testBitsetCaseplus() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, n, sparsity, plus); + } + + //Layered Graph + @Test + public void testLGCasemult() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, n, sparsity, mult); + } + + @Test + public void testLGCaseplus() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, n, sparsity, plus); + } + + //Sample + @Test + public void testSampleCasemult() { + runSparsityEstimateTest(new EstimatorSample(), m, k, n, sparsity, mult); + } + + @Test + public void testSampleCaseplus() { + runSparsityEstimateTest(new EstimatorSample(), m, k, n, sparsity, plus); + }*/ + + + private void runSparsityEstimateTest(SparsityEstimator estim, int m, int n, double[] sp, OpCode op) { + MatrixBlock m1 = MatrixBlock.randOperations(m, n, sp[0], 1, 1, "uniform", 3); + MatrixBlock m2 = MatrixBlock.randOperations(m, n, sp[1], 1, 1, "uniform", 3); + MatrixBlock m3 = new MatrixBlock(); + BinaryOperator bOp; + double est = 0; + switch(op) { + case MULT: + bOp = new BinaryOperator(Multiply.getMultiplyFnObject()); + m1.binaryOperations(bOp, m2, m3); + est = estim.estim(m1, m2, op); + break; + case PLUS: + bOp = new BinaryOperator(Plus.getPlusFnObject()); + m1.binaryOperations(bOp, m2, m3); + est = estim.estim(m1, m2, op); + break; + default: + throw new NotImplementedException(); + } + //compare estimated and real sparsity + TestUtils.compareScalars(est, m3.getSparsity(), (estim instanceof EstimatorBasicWorst) ? 5e-1 : 1e-3); + } +} http://git-wip-us.apache.org/repos/asf/systemml/blob/b7f569bd/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingle.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingle.java b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingle.java new file mode 100644 index 0000000..1756a8d --- /dev/null +++ b/src/test/java/org/apache/sysml/test/integration/functions/estim/OpSingle.java @@ -0,0 +1,252 @@ +/* + * 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.Test; +import org.apache.sysml.hops.estim.EstimatorBasicAvg; +import org.apache.sysml.hops.estim.EstimatorBasicWorst; +import org.apache.sysml.hops.estim.EstimatorBitsetMM; +import org.apache.sysml.hops.estim.EstimatorDensityMap; +import org.apache.sysml.hops.estim.EstimatorLayeredGraph; +import org.apache.sysml.hops.estim.EstimatorSample; +import org.apache.sysml.hops.estim.SparsityEstimator; +import org.apache.sysml.hops.estim.SparsityEstimator.OpCode; +import org.apache.sysml.test.integration.AutomatedTestBase; + +/** + * this is the basic operation check for all estimators with single operations + */ +public class OpSingle extends AutomatedTestBase +{ + private final static int m = 600; + private final static int k = 300; + private final static double sparsity = 0.2; +// private final static OpCode mult = OpCode.MULT; +// private final static OpCode plus = OpCode.PLUS; +// private final static OpCode rbind = OpCode.RBIND; +// private final static OpCode cbind = OpCode.CBIND; + private final static OpCode eqzero = OpCode.EQZERO; + private final static OpCode diag = OpCode.DIAG; + private final static OpCode neqzero = OpCode.NEQZERO; + private final static OpCode trans = OpCode.TRANS; + private final static OpCode reshape = OpCode.RESHAPE; + + @Override + public void setUp() { + //do nothing + } + + //Average Case + @Test + public void testAvgCaseeqzero() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, k, sparsity, eqzero); + } + + @Test + public void testAvgCasediag() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, k, sparsity, diag); + } + + @Test + public void testAvgCaseneqzero() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, k, sparsity, neqzero); + } + + @Test + public void testAvgCasetrans() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, k, sparsity, trans); + } + + @Test + public void testAvgCasereshape() { + runSparsityEstimateTest(new EstimatorBasicAvg(), m, k, sparsity, reshape); + } + + //Worst Case + @Test + public void testWCaseeqzero() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, k, sparsity, eqzero); + } + + @Test + public void testWCasediag() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, k, sparsity, diag); + } + + @Test + public void testWCaseneqzero() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, k, sparsity, neqzero); + } + + @Test + public void testWCasetrans() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, k, sparsity, trans); + } + + @Test + public void testWCasereshape() { + runSparsityEstimateTest(new EstimatorBasicWorst(), m, k, sparsity, reshape); + } + + //DensityMap + @Test + public void testDMCaseeqzero() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, eqzero); + } + + @Test + public void testDMCasediag() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, diag); + } + + @Test + public void testDMCaseneqzero() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, neqzero); + } + + @Test + public void testDMCasetrans() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, trans); + } + + @Test + public void testDMCasereshape() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, reshape); + } + + //MNC + @Test + public void testMNCCaseeqzero() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, eqzero); + } + + @Test + public void testMNCCasediag() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, diag); + } + + @Test + public void testMNCCaseneqzero() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, neqzero); + } + + @Test + public void testMNCCasetrans() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, trans); + } + + @Test + public void testMNCCasereshape() { + runSparsityEstimateTest(new EstimatorDensityMap(), m, k, sparsity, reshape); + } + + //Bitset + @Test + public void testBitsetCaseeqzero() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, sparsity, eqzero); + } + + @Test + public void testBitsetCasediag() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, sparsity, diag); + } + + @Test + public void testBitsetCaseneqzero() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, sparsity, neqzero); + } + + @Test + public void testBitsetCasetrans() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, sparsity, trans); + } + + @Test + public void testBitsetCasereshape() { + runSparsityEstimateTest(new EstimatorBitsetMM(), m, k, sparsity, reshape); + } + + //Layered Graph + @Test + public void testLGCaseeqzero() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, sparsity, eqzero); + } + + @Test + public void testLGCasediag() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, sparsity, diag); + } + + @Test + public void testLGCaseneqzero() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, sparsity, neqzero); + } + + @Test + public void testLGCasetans() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, sparsity, trans); + } + + @Test + public void testLGCasereshape() { + runSparsityEstimateTest(new EstimatorLayeredGraph(), m, k, sparsity, reshape); + } + + //Sample + @Test + public void testSampleCaseeqzero() { + runSparsityEstimateTest(new EstimatorSample(), m, k, sparsity, eqzero); + } + + @Test + public void testSampleCasediag() { + runSparsityEstimateTest(new EstimatorSample(), m, k, sparsity, diag); + } + + @Test + public void testSampleCaseneqzero() { + runSparsityEstimateTest(new EstimatorSample(), m, k, sparsity, neqzero); + } + + @Test + public void testSampleCasetrans() { + runSparsityEstimateTest(new EstimatorSample(), m, k, sparsity, trans); + } + + @Test + public void testSampleCasereshape() { + runSparsityEstimateTest(new EstimatorSample(), m, k, sparsity, reshape); + } + + private void runSparsityEstimateTest(SparsityEstimator estim, int m, int k, double sp, OpCode op) { +// MatrixBlock m1 = MatrixBlock.randOperations(m, k, sp, 1, 1, "uniform", 3); +// MatrixBlock m2 = null; +// double est = 0; +// switch(op) { +// case EQZERO: +// case DIAG: +// case NEQZERO: +// case TRANS: +// case RESHAPE: +// } +// //compare estimated and real sparsity +// TestUtils.compareScalars(est, m2.getSparsity(), (estim instanceof EstimatorBasicWorst) ? 5e-1 : 1e-2); + } +} http://git-wip-us.apache.org/repos/asf/systemml/blob/b7f569bd/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 2842905..2e9a6d6 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,10 +26,13 @@ import org.junit.runners.Suite; * won't run two of them at once. */ @RunWith(Suite.class) @Suite.SuiteClasses({ + OpBindTest.class, + OpElemWTest.class, OuterProductTest.class, SelfProductTest.class, SquaredProductChainTest.class, SquaredProductTest.class, + //OpSingle.class })
