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 2017/07/15 04:15:45 UTC
[19/23] systemml git commit: Move to dynamic rewrites. Do not rewrite
if top-level dims unknown.
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 <dh...@cs.washington.edu>
Authored: Tue Jul 11 22:54:31 2017 -0700
Committer: Dylan Hutchison <dh...@cs.washington.edu>
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