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:38 UTC
[12/23] systemml git commit: Fix visit status bug
Fix visit status bug
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/0a8936cd
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/0a8936cd
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/0a8936cd
Branch: refs/heads/master
Commit: 0a8936cd849d74baced732f45f1c53812abce537
Parents: d6d3795
Author: Dylan Hutchison <dh...@cs.washington.edu>
Authored: Sun Jun 11 03:55:25 2017 -0700
Committer: Dylan Hutchison <dh...@cs.washington.edu>
Committed: Sun Jun 18 17:43:48 2017 -0700
----------------------------------------------------------------------
.../apache/sysml/hops/rewrite/HopDagValidator.java | 5 ++++-
.../RewriteElementwiseMultChainOptimization.java | 17 +++++++++--------
2 files changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/0a8936cd/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java b/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
index 8cb5e1e..9ac21fc 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java
@@ -35,6 +35,8 @@ import org.apache.sysml.parser.Expression;
import org.apache.sysml.runtime.DMLRuntimeException;
import org.apache.sysml.utils.Explain;
+import com.google.common.collect.Lists;
+
import static org.apache.sysml.hops.HopsException.check;
/**
@@ -89,7 +91,8 @@ public class HopDagValidator {
//check visit status
final boolean seen = !state.seen.add(id);
check(seen == hop.isVisited(), hop,
- "seen previously is %b but does not match hop visit status", seen);
+ "(parents: %s) seen previously is %b but does not match hop visit status",
+ Lists.transform(hop.getParent(), Hop::getHopID), seen);
if (seen) return; // we saw the Hop previously, no need to re-validate
//check parent linking
http://git-wip-us.apache.org/repos/asf/systemml/blob/0a8936cd/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 91b7306..9ca0932 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java
@@ -91,7 +91,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
(!isBinaryMult(right) || checkForeignParent(emults, (BinaryOp)right));
if (okay) {
// 4. Construct replacement EMults for the leaves
- final Hop replacement = constructReplacement(leaves);
+ final Hop replacement = constructReplacement(emults, leaves);
if (LOG.isDebugEnabled())
LOG.debug(String.format(
"Element-wise multiply chain rewrite of %d e-mults at sub-dag %d to new sub-dag %d",
@@ -123,13 +123,14 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
}
}
- private static Hop constructReplacement(final Multiset<Hop> leaves) {
+ private static Hop constructReplacement(final Set<BinaryOp> emults, final Multiset<Hop> leaves) {
// Sort by data type
final SortedMap<Hop,Integer> sorted = new TreeMap<>(compareByDataType);
for (final Multiset.Entry<Hop> entry : leaves.entrySet()) {
final Hop h = entry.getElement();
- // unlink parents (the EMults, which we are throwing away)
- h.getParent().clear();
+ // unlink parents that are in the emult set(we are throwing them away)
+ // keep other parents
+ h.getParent().removeIf(parent -> parent instanceof BinaryOp && emults.contains(parent));
sorted.put(h, entry.getCount());
}
// sorted contains all leaves, sorted by data type, stripped from their parents
@@ -146,12 +147,13 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
return first;
}
- private static Hop constructPower(Map.Entry<Hop, Integer> entry) {
+ private static Hop constructPower(final Map.Entry<Hop, Integer> entry) {
final Hop hop = entry.getKey();
final int cnt = entry.getValue();
assert(cnt >= 1);
+ hop.setVisited(); // we will visit the leaves' children next
if (cnt == 1)
- return hop; // don't set this visited... we will visit this next
+ return hop;
Hop pow = HopRewriteUtils.createBinary(hop, new LiteralOp(cnt), Hop.OpOp2.POW);
pow.setVisited();
return pow;
@@ -222,8 +224,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule {
final ArrayList<Hop> parents = child.getParent();
if (parents.size() > 1)
for (final Hop parent : parents)
- //noinspection SuspiciousMethodCalls (for Intellij, which checks when
- if (!emults.contains(parent))
+ if (parent instanceof BinaryOp && !emults.contains(parent))
return false;
// child does not have foreign parents