Repository: systemml Updated Branches: refs/heads/master a671883fc -> c3601d419
[SYSTEMML-2068] Codegen support for xor operations Closes #718. Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/c3601d41 Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/c3601d41 Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/c3601d41 Branch: refs/heads/master Commit: c3601d419a47f218af1517eaee66383d820ada86 Parents: a671883 Author: Janardhan Pulivarthi <j...@protonmail.com> Authored: Sun Feb 4 13:53:00 2018 -0800 Committer: Matthias Boehm <mboe...@gmail.com> Committed: Sun Feb 4 13:55:19 2018 -0800 ---------------------------------------------------------------------- .../sysml/hops/codegen/cplan/CNodeBinary.java | 28 ++++-- .../hops/codegen/template/TemplateRow.java | 2 +- .../runtime/codegen/LibSpoofPrimitives.java | 95 +++++++++++++++++++- .../codegen/CPlanVectorPrimitivesTest.java | 32 ++++++- .../functions/codegen/CellwiseTmplTest.java | 22 ++++- .../functions/codegen/RowAggTmplTest.java | 21 ++++- .../scripts/functions/codegen/cellwisetmpl17.R | 33 +++++++ .../functions/codegen/cellwisetmpl17.dml | 29 ++++++ .../scripts/functions/codegen/rowAggPattern36.R | 33 +++++++ .../functions/codegen/rowAggPattern36.dml | 29 ++++++ 10 files changed, 309 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeBinary.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeBinary.java b/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeBinary.java index d771a84..2f7feb0 100644 --- a/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeBinary.java +++ b/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeBinary.java @@ -35,22 +35,24 @@ public class CNodeBinary extends CNode VECT_POW_ADD, VECT_MIN_ADD, VECT_MAX_ADD, VECT_EQUAL_ADD, VECT_NOTEQUAL_ADD, VECT_LESS_ADD, VECT_LESSEQUAL_ADD, VECT_GREATER_ADD, VECT_GREATEREQUAL_ADD, - VECT_CBIND_ADD, + VECT_CBIND_ADD, VECT_XOR_ADD, //vector-scalar operations VECT_MULT_SCALAR, VECT_DIV_SCALAR, VECT_MINUS_SCALAR, VECT_PLUS_SCALAR, VECT_POW_SCALAR, VECT_MIN_SCALAR, VECT_MAX_SCALAR, VECT_EQUAL_SCALAR, VECT_NOTEQUAL_SCALAR, VECT_LESS_SCALAR, VECT_LESSEQUAL_SCALAR, VECT_GREATER_SCALAR, VECT_GREATEREQUAL_SCALAR, VECT_CBIND, + VECT_XOR_SCALAR, //vector-vector operations VECT_MULT, VECT_DIV, VECT_MINUS, VECT_PLUS, VECT_MIN, VECT_MAX, VECT_EQUAL, VECT_NOTEQUAL, VECT_LESS, VECT_LESSEQUAL, VECT_GREATER, VECT_GREATEREQUAL, + VECT_XOR, //scalar-scalar operations MULT, DIV, PLUS, MINUS, MODULUS, INTDIV, LESS, LESSEQUAL, GREATER, GREATEREQUAL, EQUAL,NOTEQUAL, - MIN, MAX, AND, OR, LOG, LOG_NZ, POW, + MIN, MAX, AND, OR, XOR, LOG, LOG_NZ, POW, MINUS1_MULT, MINUS_NZ; - + public static boolean contains(String value) { for( BinType bt : values() ) if( bt.name().equals(value) ) @@ -88,6 +90,7 @@ public class CNodeBinary extends CNode case VECT_MINUS_ADD: case VECT_PLUS_ADD: case VECT_POW_ADD: + case VECT_XOR_ADD: case VECT_MIN_ADD: case VECT_MAX_ADD: case VECT_EQUAL_ADD: @@ -112,6 +115,7 @@ public class CNodeBinary extends CNode case VECT_MINUS_SCALAR: case VECT_PLUS_SCALAR: case VECT_POW_SCALAR: + case VECT_XOR_SCALAR: case VECT_MIN_SCALAR: case VECT_MAX_SCALAR: case VECT_EQUAL_SCALAR: @@ -142,6 +146,7 @@ public class CNodeBinary extends CNode case VECT_DIV: case VECT_MINUS: case VECT_PLUS: + case VECT_XOR: case VECT_MIN: case VECT_MAX: case VECT_EQUAL: @@ -199,6 +204,8 @@ public class CNodeBinary extends CNode return " double %TMP% = 1 - %IN1% * %IN2%;\n"; case MINUS_NZ: return " double %TMP% = (%IN1% != 0) ? %IN1% - %IN2% : 0;\n"; + case XOR: + return " double %TMP% = ( (%IN1% != 0) != (%IN2% != 0) ) ? 1 : 0;\n"; default: throw new RuntimeException("Invalid binary type: "+this.toString()); @@ -217,7 +224,8 @@ public class CNodeBinary extends CNode || this == VECT_EQUAL_SCALAR || this == VECT_NOTEQUAL_SCALAR || this == VECT_LESS_SCALAR || this == VECT_LESSEQUAL_SCALAR || this == VECT_GREATER_SCALAR || this == VECT_GREATEREQUAL_SCALAR - || this == VECT_CBIND; + || this == VECT_CBIND + || this == VECT_XOR_SCALAR; } public boolean isVectorVectorPrimitive() { return this == VECT_DIV || this == VECT_MULT @@ -225,7 +233,8 @@ public class CNodeBinary extends CNode || this == VECT_MIN || this == VECT_MAX || this == VECT_EQUAL || this == VECT_NOTEQUAL || this == VECT_LESS || this == VECT_LESSEQUAL - || this == VECT_GREATER || this == VECT_GREATEREQUAL; + || this == VECT_GREATER || this == VECT_GREATEREQUAL + || this == VECT_XOR; } public boolean isVectorMatrixPrimitive() { return this == VECT_MATRIXMULT @@ -351,6 +360,7 @@ public class CNodeBinary extends CNode case VECT_DIV_SCALAR: return "b(vd)"; case VECT_MINUS_SCALAR: return "b(vmi)"; case VECT_PLUS_SCALAR: return "b(vp)"; + case VECT_XOR_SCALAR: return "v(vxor)"; case VECT_POW_SCALAR: return "b(vpow)"; case VECT_MIN_SCALAR: return "b(vmin)"; case VECT_MAX_SCALAR: return "b(vmax)"; @@ -364,6 +374,7 @@ public class CNodeBinary extends CNode case VECT_DIV: return "b(v2d)"; case VECT_MINUS: return "b(v2mi)"; case VECT_PLUS: return "b(v2p)"; + case VECT_XOR: return "b(v2xor)"; case VECT_MIN: return "b(v2min)"; case VECT_MAX: return "b(v2max)"; case VECT_EQUAL: return "b(v2eq)"; @@ -388,6 +399,7 @@ public class CNodeBinary extends CNode case NOTEQUAL: return "b(!=)"; case OR: return "b(|)"; case AND: return "b(&)"; + case XOR: return "b(xor)"; case MINUS1_MULT: return "b(1-*)"; case MINUS_NZ: return "b(-nz)"; default: return "b("+_type.name().toLowerCase()+")"; @@ -413,6 +425,7 @@ public class CNodeBinary extends CNode case VECT_GREATER_ADD: case VECT_GREATEREQUAL_ADD: case VECT_CBIND_ADD: + case VECT_XOR_ADD: boolean vectorScalar = _inputs.get(1).getDataType()==DataType.SCALAR; _rows = _inputs.get(vectorScalar ? 0 : 1)._rows; _cols = _inputs.get(vectorScalar ? 0 : 1)._cols; @@ -435,6 +448,7 @@ public class CNodeBinary extends CNode case VECT_MULT_SCALAR: case VECT_MINUS_SCALAR: case VECT_PLUS_SCALAR: + case VECT_XOR_SCALAR: case VECT_POW_SCALAR: case VECT_MIN_SCALAR: case VECT_MAX_SCALAR: @@ -449,6 +463,7 @@ public class CNodeBinary extends CNode case VECT_MULT: case VECT_MINUS: case VECT_PLUS: + case VECT_XOR: case VECT_MIN: case VECT_MAX: case VECT_EQUAL: @@ -491,7 +506,8 @@ public class CNodeBinary extends CNode case MIN: case MAX: case AND: - case OR: + case OR: + case XOR: case LOG: case LOG_NZ: case POW: http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java b/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java index 5bc8f4f..74d7b78 100644 --- a/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java +++ b/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java @@ -65,7 +65,7 @@ public class TemplateRow extends TemplateBase OpOp1.SIN, OpOp1.COS, OpOp1.TAN, OpOp1.ASIN, OpOp1.ACOS, OpOp1.ATAN, OpOp1.SINH, OpOp1.COSH, OpOp1.TANH, OpOp1.CUMSUM, OpOp1.CUMMIN, OpOp1.CUMMAX}; private static final Hop.OpOp2[] SUPPORTED_VECT_BINARY = new OpOp2[]{ - OpOp2.MULT, OpOp2.DIV, OpOp2.MINUS, OpOp2.PLUS, OpOp2.POW, OpOp2.MIN, OpOp2.MAX, + OpOp2.MULT, OpOp2.DIV, OpOp2.MINUS, OpOp2.PLUS, OpOp2.POW, OpOp2.MIN, OpOp2.MAX, OpOp2.XOR, OpOp2.EQUAL, OpOp2.NOTEQUAL, OpOp2.LESS, OpOp2.LESSEQUAL, OpOp2.GREATER, OpOp2.GREATEREQUAL}; public TemplateRow() { http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/main/java/org/apache/sysml/runtime/codegen/LibSpoofPrimitives.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/codegen/LibSpoofPrimitives.java b/src/main/java/org/apache/sysml/runtime/codegen/LibSpoofPrimitives.java index 8edb25e..33b18b9 100644 --- a/src/main/java/org/apache/sysml/runtime/codegen/LibSpoofPrimitives.java +++ b/src/main/java/org/apache/sysml/runtime/codegen/LibSpoofPrimitives.java @@ -560,9 +560,98 @@ public class LibSpoofPrimitives //invariant to the ordering of inputs return vectPlusWrite(b, a, bix, bi, ai, blen, len); } - + + //custom vector xor + /** + * Computes c = xor(A,B) + * + * @param a dense input vector A + * @param ai start position in A + * @param bval scalar value + * @param c resultant vector + * @param ci index of c + * @param len number of processed elements + * @return resultant value + */ + public static void vectXorAdd(double[] a, double bval, double[] c, int ai, int ci, int len) { + for( int j = ai; j < ai+len; j++, ci++) + c[ci] += ( (a[j] != 0) != (bval != 0) ) ? 1 : 0; + } + + public static void vectXorAdd(double bval, double[] a, double[] c, int ai, int ci, int len) { + for( int j = ai; j < ai+len; j++, ci++) + c[ci] += ( (bval != 0) != (a[j] != 0) ) ? 1 : 0; + } + + public static void vectXorAdd(double[] a, double bval, double[] c, int[] aix, int ai, int ci, int alen, int len) { + for( int j = ai; j < ai+alen; j++ ) + c[ci + aix[j]] += ( (a[j] != 0) != (bval != 0) ) ? 1 : 0; + } + + public static void vectXorAdd(double bval, double[] a, double[] c, int[] aix, int ai, int ci, int alen, int len) { + for( int j = ai; j < ai+alen; j++ ) + c[ci + aix[j]] += ( (bval != 0) != (a[j] != 0) ) ? 1 : 0; + } + + //1. scalar vs. dense vector + public static double[] vectXorWrite(double[] a, double bval, int ai, int len) { + double[] c = allocVector(len, false); + for( int j = 0; j < len; j++) + c[j] = ( ( a[ai+j] != 0) != (bval != 0) ) ? 1 : 0; + return c; + } + + //2. dense vector vs. scalar + public static double[] vectXorWrite(double bval, double[] a, int ai, int len) { + double[] c = allocVector(len, false); + for( int j = 0; j < len; j++) + c[j] = ( (bval != 0) != (a[ai + j] != 0) ) ? 1 : 0; + return c; + } + + //3. dense vector vs. dense vector + public static double[] vectXorWrite(double[] a, double[] b, int ai, int bi, int len) { + double[] c = allocVector(len, false); + for( int j = 0; j < len; j++) + c[j] = ( (a[ai + j] != 0) != (b[bi + j] != 0) ) ? 1 : 0; + return c; + } + + //4. sparse vector vs scalar + public static double[] vectXorWrite(double[] a, double bval, int[] aix, int ai, int alen, int len) { + double init = (bval != 0) ? 1 : 0; + double[] c = allocVector(len, true, init); + for( int j = ai; j < ai+alen; j++ ) + c[aix[j]] = (a[j] != 0) ? 0 : 1; + return c; + } + + //5. scalar vs. sparse vector + public static double[] vectXorWrite(double bval, double[] a, int[] aix, int ai, int alen, int len) { + double init = (bval != 0) ? 1 : 0; + double[] c = allocVector(len, true, init); + for( int j = ai; j < ai+alen; j++ ) + c[aix[j]] = (a[j] != 0) ? 0 : 1; + return c; + } + + //6. sparse vector vs. dense vector + public static double[] vectXorWrite(double[] a, double[] b, int[] aix, int ai, int bi, int alen, int len) { + double[] c = allocVector(len, false); + for( int j = 0; j < len; j++ ) + c[j] = (b[bi+j] != 0) ? 1 : 0; + for( int j = ai; j < ai+alen; j++ ) + c[aix[j]] = ( ( a[j] != 0) != (c[aix[j]] != 0) )? 1 : 0; + return c; + } + + //6. sparse vector vs. dense vector + public static void vectXorWrite(double[] a, double[] b, int ai, int[] aix, int bi, int alen, int len) { + vectXorWrite(a, b, aix, ai, bi, alen, len); + } + //custom vector pow - + public static void vectPowAdd(double[] a, double bval, double[] c, int ai, int ci, int len) { for( int j = ai; j < ai+len; j++, ci++) c[ci] += Math.pow(a[j], bval); @@ -1862,7 +1951,7 @@ public class LibSpoofPrimitives } protected static double[] allocVector(int len, boolean reset, double resetVal) { - VectorBuffer buff = memPool.get(); + VectorBuffer buff = memPool.get(); //find next matching vector in ring buffer or //allocate new vector if required http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/test/java/org/apache/sysml/test/integration/functions/codegen/CPlanVectorPrimitivesTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/sysml/test/integration/functions/codegen/CPlanVectorPrimitivesTest.java b/src/test/java/org/apache/sysml/test/integration/functions/codegen/CPlanVectorPrimitivesTest.java index c2c4704..d43ffa5 100644 --- a/src/test/java/org/apache/sysml/test/integration/functions/codegen/CPlanVectorPrimitivesTest.java +++ b/src/test/java/org/apache/sysml/test/integration/functions/codegen/CPlanVectorPrimitivesTest.java @@ -644,7 +644,37 @@ public class CPlanVectorPrimitivesTest extends AutomatedTestBase public void testVectorVectorGreaterEqualSparseDense() { testVectorBinaryPrimitive(BinType.VECT_GREATEREQUAL, InputType.VECTOR_SPARSE, InputType.VECTOR_DENSE); } - + + @Test + public void testScalarVectorXorDense() { + testVectorBinaryPrimitive(BinType.VECT_XOR_SCALAR, InputType.SCALAR, InputType.VECTOR_DENSE); + } + + @Test + public void testVectorScalarXorDense() { + testVectorBinaryPrimitive(BinType.VECT_XOR_SCALAR, InputType.VECTOR_DENSE, InputType.VECTOR_DENSE); + } + + @Test + public void testVectorVectorDenseDense() { + testVectorBinaryPrimitive(BinType.VECT_XOR, InputType.VECTOR_DENSE, InputType.VECTOR_DENSE); + } + + @Test + public void testVectorScalarSparse() { + testVectorBinaryPrimitive(BinType.VECT_XOR_SCALAR, InputType.VECTOR_SPARSE, InputType.SCALAR); + } + + @Test + public void testScalarVectorSparse() { + testVectorBinaryPrimitive(BinType.VECT_XOR_SCALAR, InputType.SCALAR, InputType.VECTOR_SPARSE); + } + + @Test + public void testVectorVectorSparseDense() { + testVectorBinaryPrimitive(BinType.VECT_XOR, InputType.VECTOR_SPARSE, InputType.VECTOR_DENSE); + } + @SuppressWarnings("incomplete-switch") private static void testVectorAggPrimitive(UnaryType aggtype, InputType type1) { http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/test/java/org/apache/sysml/test/integration/functions/codegen/CellwiseTmplTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/sysml/test/integration/functions/codegen/CellwiseTmplTest.java b/src/test/java/org/apache/sysml/test/integration/functions/codegen/CellwiseTmplTest.java index 701a367..bd3b36a 100644 --- a/src/test/java/org/apache/sysml/test/integration/functions/codegen/CellwiseTmplTest.java +++ b/src/test/java/org/apache/sysml/test/integration/functions/codegen/CellwiseTmplTest.java @@ -51,7 +51,8 @@ public class CellwiseTmplTest extends AutomatedTestBase private static final String TEST_NAME13 = TEST_NAME+13; //min(X + 7 * Y) large private static final String TEST_NAME14 = TEST_NAME+14; //-2 * X + t(Y); t(Y) is rowvector private static final String TEST_NAME15 = TEST_NAME+15; //colMins(2*log(X)) - private static final String TEST_NAME16 = TEST_NAME+16; //colSums(2*log(X)); + private static final String TEST_NAME16 = TEST_NAME+16; //colSums(2*log(X)); + private static final String TEST_NAME17 = TEST_NAME+17; //xor operation private static final String TEST_DIR = "functions/codegen/"; @@ -65,7 +66,7 @@ public class CellwiseTmplTest extends AutomatedTestBase @Override public void setUp() { TestUtils.clearAssertionInformation(); - for( int i=1; i<=16; i++ ) { + for( int i=1; i<=17; i++ ) { addTestConfiguration( TEST_NAME+i, new TestConfiguration( TEST_CLASS_DIR, TEST_NAME+i, new String[] {String.valueOf(i)}) ); } @@ -287,6 +288,21 @@ public class CellwiseTmplTest extends AutomatedTestBase public void testCodegenCellwiseRewrite16_sp() { testCodegenIntegration( TEST_NAME16, true, ExecType.SPARK ); } + + @Test + public void testCodegenCellwiseRewrite17() { + testCodegenIntegration( TEST_NAME17, true, ExecType.CP ); + } + + @Test + public void testCodegenCellwise17() { + testCodegenIntegration( TEST_NAME17, false, ExecType.CP ); + } + + @Test + public void testCodegenCellwiseRewrite17_sp() { + testCodegenIntegration( TEST_NAME17, true, ExecType.SPARK ); + } private void testCodegenIntegration( String testname, boolean rewrites, ExecType instType ) @@ -352,6 +368,8 @@ public class CellwiseTmplTest extends AutomatedTestBase Assert.assertTrue(!heavyHittersContainsSubString("uacmin")); else if( testname.equals(TEST_NAME16) ) Assert.assertTrue(!heavyHittersContainsSubString("uack+")); + else if( testname.equals(TEST_NAME17) ) + Assert.assertTrue(!heavyHittersContainsSubString("xor")); } finally { rtplatform = platformOld; http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/test/java/org/apache/sysml/test/integration/functions/codegen/RowAggTmplTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/sysml/test/integration/functions/codegen/RowAggTmplTest.java b/src/test/java/org/apache/sysml/test/integration/functions/codegen/RowAggTmplTest.java index 6124c77..129178d 100644 --- a/src/test/java/org/apache/sysml/test/integration/functions/codegen/RowAggTmplTest.java +++ b/src/test/java/org/apache/sysml/test/integration/functions/codegen/RowAggTmplTest.java @@ -72,6 +72,7 @@ public class RowAggTmplTest extends AutomatedTestBase private static final String TEST_NAME33 = TEST_NAME+"33"; //Kmeans, inner loop private static final String TEST_NAME34 = TEST_NAME+"34"; //X / rowSums(X!=0) private static final String TEST_NAME35 = TEST_NAME+"35"; //cbind(X/rowSums(X), Y, Z) + private static final String TEST_NAME36 = TEST_NAME+"36"; //xor operation private static final String TEST_DIR = "functions/codegen/"; private static final String TEST_CLASS_DIR = TEST_DIR + RowAggTmplTest.class.getSimpleName() + "/"; @@ -83,7 +84,7 @@ public class RowAggTmplTest extends AutomatedTestBase @Override public void setUp() { TestUtils.clearAssertionInformation(); - for(int i=1; i<=35; i++) + for(int i=1; i<=36; i++) addTestConfiguration( TEST_NAME+i, new TestConfiguration(TEST_CLASS_DIR, TEST_NAME+i, new String[] { String.valueOf(i) }) ); } @@ -611,7 +612,21 @@ public class RowAggTmplTest extends AutomatedTestBase public void testCodegenRowAgg35SP() { testCodegenIntegration( TEST_NAME35, false, ExecType.SPARK ); } - + + @Test + public void testCodegenRowAggRewrite36CP() { + testCodegenIntegration( TEST_NAME36, true, ExecType.CP ); + } + + @Test + public void testCodegenRowAgg36CP() { + testCodegenIntegration( TEST_NAME36, false, ExecType.CP ); + } + + @Test + public void testCodegenRowAgg36SP() { + testCodegenIntegration( TEST_NAME36, false, ExecType.SPARK ); + } private void testCodegenIntegration( String testname, boolean rewrites, ExecType instType ) { @@ -667,6 +682,8 @@ public class RowAggTmplTest extends AutomatedTestBase if( testname.equals(TEST_NAME35) ) Assert.assertTrue(!heavyHittersContainsSubString("spoofRA", 2) && !heavyHittersContainsSubString("cbind")); + if( testname.equals(TEST_NAME36) ) + Assert.assertTrue(!heavyHittersContainsSubString("xor")); } finally { rtplatform = platformOld; http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/test/scripts/functions/codegen/cellwisetmpl17.R ---------------------------------------------------------------------- diff --git a/src/test/scripts/functions/codegen/cellwisetmpl17.R b/src/test/scripts/functions/codegen/cellwisetmpl17.R new file mode 100644 index 0000000..a1ae201 --- /dev/null +++ b/src/test/scripts/functions/codegen/cellwisetmpl17.R @@ -0,0 +1,33 @@ +#------------------------------------------------------------- +# +# 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. +# +#------------------------------------------------------------- + +args<-commandArgs(TRUE) +options(digits=22) +library("Matrix") + +X = matrix(seq(7, 1100*200+6), 1100, 200, byrow=TRUE); + +R1 = (X/3) %% 0.6; +R2 = (X/3) %/% 0.6; + +R = xor(R1, R2); + +writeMM(as(R,"CsparseMatrix"), paste(args[2], "S", sep="")); http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/test/scripts/functions/codegen/cellwisetmpl17.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/functions/codegen/cellwisetmpl17.dml b/src/test/scripts/functions/codegen/cellwisetmpl17.dml new file mode 100644 index 0000000..151b4f7 --- /dev/null +++ b/src/test/scripts/functions/codegen/cellwisetmpl17.dml @@ -0,0 +1,29 @@ +#------------------------------------------------------------- +# +# 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. +# +#------------------------------------------------------------- + +X = matrix(seq(7, 1100*200+6), 1100, 200); + +R1 = (X/3) %% 0.6; +R2 = (X/3) %/% 0.6; + +S = xor(R1, R2); + +write(S, $1) http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/test/scripts/functions/codegen/rowAggPattern36.R ---------------------------------------------------------------------- diff --git a/src/test/scripts/functions/codegen/rowAggPattern36.R b/src/test/scripts/functions/codegen/rowAggPattern36.R new file mode 100644 index 0000000..349720e --- /dev/null +++ b/src/test/scripts/functions/codegen/rowAggPattern36.R @@ -0,0 +1,33 @@ +#------------------------------------------------------------- +# +# 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. +# +#------------------------------------------------------------- + +args<-commandArgs(TRUE) +options(digits=22) +library("Matrix") +library("matrixStats") + +X = matrix(seq(1, 6000)/600, 300, 20); + +Y = X/rowSums(X) + +R = xor(X,Y); + +writeMM(as(R, "CsparseMatrix"), paste(args[2], "S", sep="")); http://git-wip-us.apache.org/repos/asf/systemml/blob/c3601d41/src/test/scripts/functions/codegen/rowAggPattern36.dml ---------------------------------------------------------------------- diff --git a/src/test/scripts/functions/codegen/rowAggPattern36.dml b/src/test/scripts/functions/codegen/rowAggPattern36.dml new file mode 100644 index 0000000..cded6cc --- /dev/null +++ b/src/test/scripts/functions/codegen/rowAggPattern36.dml @@ -0,0 +1,29 @@ +#------------------------------------------------------------- +# +# 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. +# +#------------------------------------------------------------- + +X = matrix(seq(1, 6000)/600, 300, 20); + +Y = X/rowSums(X) + +S = xor(X, Y); + +write(S, $1); +