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
