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 2016/01/04 01:01:04 UTC
[2/4] incubator-systemml git commit: New static simplification
rewrite 'simplify unary-over-ppred operations'
New static simplification rewrite 'simplify unary-over-ppred operations'
Examples are abs(ppred()) -> ppred() and similarly ceil, floor, and
round over ppred because ppred guarantees 0/1 indicator outputs.
Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/ba08b4c1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/ba08b4c1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/ba08b4c1
Branch: refs/heads/master
Commit: ba08b4c1b25f0a66e24cc8bf5ebf0c5f7f71581a
Parents: f514f82
Author: Matthias Boehm <mb...@us.ibm.com>
Authored: Sat Jan 2 16:52:59 2016 -0800
Committer: Matthias Boehm <mb...@us.ibm.com>
Committed: Sat Jan 2 16:52:59 2016 -0800
----------------------------------------------------------------------
.../RewriteAlgebraicSimplificationStatic.java | 35 +++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/ba08b4c1/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
index adda6a2..5483bed 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
@@ -138,7 +138,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 = simplifyTransposedAppend(hop, hi, i); //e.g., t(cbind(t(A),t(B))) -> rbind(A,B);
+ hi = simplifyUnaryPPredOperation(hop, hi, i); //e.g., abs(ppred()) -> ppred(), others: round, ceil, floor
+ 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];
@@ -744,6 +745,38 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
* @param pos
* @return
*/
+ private Hop simplifyUnaryPPredOperation( Hop parent, Hop hi, int pos )
+ {
+ if( hi instanceof UnaryOp && hi.getDataType()==DataType.MATRIX //unaryop
+ && hi.getInput().get(0) instanceof BinaryOp //binaryop - ppred
+ && ((BinaryOp)hi.getInput().get(0)).isPPredOperation() )
+ {
+ UnaryOp uop = (UnaryOp) hi; //valid unary op
+ if( uop.getOp()==OpOp1.ABS || uop.getOp()==OpOp1.CEIL
+ || uop.getOp()==OpOp1.FLOOR || uop.getOp()==OpOp1.ROUND )
+ {
+ //clear link unary-binary
+ Hop input = uop.getInput().get(0);
+ HopRewriteUtils.removeAllChildReferences(hi);
+
+ HopRewriteUtils.removeChildReferenceByPos(parent, hi, pos);
+ HopRewriteUtils.addChildReference(parent, input, pos);
+ hi = input;
+
+ LOG.debug("Applied simplifyUnaryPPredOperation.");
+ }
+ }
+
+ return hi;
+ }
+
+ /**
+ *
+ * @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)