You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by lr...@apache.org on 2015/11/19 21:46:53 UTC
[11/50] [abbrv] incubator-systemml git commit: [SYSML-221] New
simplification rewrite 'simplify transposed append'
[SYSML-221] New simplification rewrite 'simplify transposed append'
Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/655e7060
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/655e7060
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/655e7060
Branch: refs/heads/master
Commit: 655e7060580d3118d3fc8b0a0ca7b85eca7174db
Parents: 1043f43
Author: Matthias Boehm <mb...@us.ibm.com>
Authored: Thu Oct 29 01:52:14 2015 -0700
Committer: Matthias Boehm <mb...@us.ibm.com>
Committed: Thu Oct 29 12:28:24 2015 -0700
----------------------------------------------------------------------
.../RewriteAlgebraicSimplificationStatic.java | 54 +++++++++++++++++++-
1 file changed, 53 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/655e7060/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
index 9e09da8..25f4f4e 100644
--- a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
+++ b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
@@ -140,7 +140,8 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
hi = simplifyDistributiveBinaryOperation(hop, hi, i);//e.g., (X-Y*X) -> (1-Y)*X
hi = simplifyBushyBinaryOperation(hop, hi, i); //e.g., (X*(Y*(Z%*%v))) -> (X*Y)*(Z%*%v)
hi = simplifyUnaryAggReorgOperation(hop, hi, i); //e.g., sum(t(X)) -> sum(X)
- hi = fuseBinarySubDAGToUnaryOperation(hop, hi, i); //e.g., X*(1-X)-> sprop(X) || 1/(1+exp(-X)) -> sigmoid(X) || X*(X>0) -> selp(X)
+ hi = simplifyTransposedAppend(hop, hi, i); //e.g., t(cbind(t(A),t(B))) -> rbind(A,B);
+ hi = fuseBinarySubDAGToUnaryOperation(hop, hi, i); //e.g., X*(1-X)-> sprop(X) || 1/(1+exp(-X)) -> sigmoid(X) || X*(X>0) -> selp(X)
hi = simplifyTraceMatrixMult(hop, hi, i); //e.g., trace(X%*%Y)->sum(X*t(Y));
hi = simplifySlicedMatrixMult(hop, hi, i); //e.g., (X%*%Y)[1,1] -> X[1,] %*% Y[,1];
hi = simplifyConstantSort(hop, hi, i); //e.g., order(matrix())->matrix/seq;
@@ -742,6 +743,57 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
}
/**
+ *
+ * @param parent
+ * @param hi
+ * @param pos
+ * @return
+ */
+ private Hop simplifyTransposedAppend( Hop parent, Hop hi, int pos )
+ {
+ //e.g., t(cbind(t(A),t(B))) --> rbind(A,B), t(rbind(t(A),t(B))) --> cbind(A,B)
+ if( hi instanceof ReorgOp && ((ReorgOp)hi).getOp()==ReOrgOp.TRANSPOSE //t() rooted
+ && hi.getInput().get(0) instanceof BinaryOp
+ && (((BinaryOp)hi.getInput().get(0)).getOp()==OpOp2.CBIND //append (cbind/rbind)
+ || ((BinaryOp)hi.getInput().get(0)).getOp()==OpOp2.RBIND)
+ && hi.getInput().get(0).getParent().size() == 1 ) //single consumers of append
+ {
+ BinaryOp bop = (BinaryOp)hi.getInput().get(0);
+ if( bop.getInput().get(0) instanceof ReorgOp //both inputs transpose ops
+ && ((ReorgOp)bop.getInput().get(0)).getOp()==ReOrgOp.TRANSPOSE
+ && bop.getInput().get(1) instanceof ReorgOp
+ && ((ReorgOp)bop.getInput().get(1)).getOp()==ReOrgOp.TRANSPOSE )
+ {
+ Hop left = bop.getInput().get(0).getInput().get(0);
+ Hop right = bop.getInput().get(1).getInput().get(0);
+
+ //rewire links from parent, transpose, and binary
+ HopRewriteUtils.removeChildReferenceByPos(parent, hi, pos);
+ HopRewriteUtils.addChildReference(parent, bop, pos);
+ HopRewriteUtils.removeAllChildReferences(hi);
+ HopRewriteUtils.removeAllChildReferences(bop);
+
+ //change append type (safe due to single parent check)
+ if( bop.getOp()==OpOp2.CBIND )
+ bop.setOp(OpOp2.RBIND);
+ else
+ bop.setOp(OpOp2.CBIND);
+
+ //relink new childs to binary op
+ HopRewriteUtils.addChildReference(bop, left, 0);
+ HopRewriteUtils.addChildReference(bop, right, 1);
+ bop.refreshSizeInformation();
+
+ hi = bop;
+
+ LOG.debug("Applied simplifyTransposedAppend (line "+hi.getBeginLine()+").");
+ }
+ }
+
+ return hi;
+ }
+
+ /**
* handle simplification of more complex sub DAG to unary operation.
*
* X*(1-X) -> sprop(X)