Move to dynamic rewrites. Do not rewrite if top-level dims unknown.

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

Branch: refs/heads/master
Commit: d18a4c80dece566ddbad34a7f3c2f70ce544023e
Parents: c4e9228
Author: Dylan Hutchison <[email protected]>
Authored: Tue Jul 11 22:54:31 2017 -0700
Committer: Dylan Hutchison <[email protected]>
Committed: Tue Jul 11 22:54:31 2017 -0700

----------------------------------------------------------------------
 .../java/org/apache/sysml/hops/rewrite/ProgramRewriter.java    | 6 +++---
 .../hops/rewrite/RewriteElementwiseMultChainOptimization.java  | 5 +++--
 2 files changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/d18a4c80/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java 
b/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
index a1ff5bc..59565df 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
@@ -96,8 +96,6 @@ public class ProgramRewriter
                        _dagRuleSet.add(     new 
RewriteRemoveUnnecessaryCasts()             );         
                        if( 
OptimizerUtils.ALLOW_COMMON_SUBEXPRESSION_ELIMINATION )
                                _dagRuleSet.add( new 
RewriteCommonSubexpressionElimination()     );
-                       if ( OptimizerUtils.ALLOW_SUM_PRODUCT_REWRITES)
-                               _dagRuleSet.add( new 
RewriteElementwiseMultChainOptimization()   ); //dependency: cse
                        if( OptimizerUtils.ALLOW_CONSTANT_FOLDING )
                                _dagRuleSet.add( new RewriteConstantFolding()   
                 ); //dependency: cse
                        if( OptimizerUtils.ALLOW_ALGEBRAIC_SIMPLIFICATION )
@@ -125,7 +123,9 @@ public class ProgramRewriter
                // DYNAMIC REWRITES (which do require size information)
                if( dynamicRewrites )
                {
-                       _dagRuleSet.add(     new 
RewriteMatrixMultChainOptimization()         ); //dependency: cse 
+                       _dagRuleSet.add(     new 
RewriteMatrixMultChainOptimization()         ); //dependency: cse
+                       if ( OptimizerUtils.ALLOW_SUM_PRODUCT_REWRITES)
+                               _dagRuleSet.add( new 
RewriteElementwiseMultChainOptimization()    ); //dependency: cse
                        
                        if( OptimizerUtils.ALLOW_ALGEBRAIC_SIMPLIFICATION )
                        {

http://git-wip-us.apache.org/repos/asf/systemml/blob/d18a4c80/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
 
b/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
index de1def8..1f85bbf 100644
--- 
a/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
+++ 
b/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
@@ -44,6 +44,7 @@ import org.apache.sysml.parser.Expression;
  *
  * Does not rewrite in the presence of foreign parents in the middle of the 
e-wise multiply chain,
  * since foreign parents may rely on the individual results.
+ * Does not perform rewrites on an element-wise multiply if its dimensions are 
unknown.
  *
  * The new order of element-wise multiply chains is as follows:
  * <pre>
@@ -81,8 +82,8 @@ public class RewriteElementwiseMultChainOptimization extends 
HopRewriteRule {
                        return root;
                root.setVisited();
 
-               // 1. Find immediate subtree of EMults.
-               if (isBinaryMult(root)) {
+               // 1. Find immediate subtree of EMults. Check dimsKnown.
+               if (isBinaryMult(root) && root.dimsKnown()) {
                        final Hop left = root.getInput().get(0), right = 
root.getInput().get(1);
                        final Set<BinaryOp> emults = new HashSet<>();
                        final Map<Hop, Integer> leaves = new HashMap<>(); // 
poor man's HashMultiset

Reply via email to