Repository: systemml Updated Branches: refs/heads/master a5c834b27 -> 87cc5ee67
[SYSTEMML-1724] Remove Guava from compile-time dependencies Remove addition of Guava compile-time dependency from SYSTEMML-1663. Replace with Java 8 and standard collections classes. Closes #549. Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/87cc5ee6 Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/87cc5ee6 Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/87cc5ee6 Branch: refs/heads/master Commit: 87cc5ee67d055ed0628f3128b10dbdeb3ec149d5 Parents: a5c834b Author: Dylan Hutchison <[email protected]> Authored: Wed Jun 21 20:50:33 2017 -0700 Committer: Matthias Boehm <[email protected]> Committed: Wed Jun 21 20:50:33 2017 -0700 ---------------------------------------------------------------------- .../sysml/hops/rewrite/HopDagValidator.java | 13 +++++---- ...RewriteElementwiseMultChainOptimization.java | 29 +++++++++++--------- 2 files changed, 23 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/87cc5ee6/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 9ac21fc..39c3afe 100644 --- a/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java +++ b/src/main/java/org/apache/sysml/hops/rewrite/HopDagValidator.java @@ -22,10 +22,10 @@ package org.apache.sysml.hops.rewrite; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; +import java.util.stream.Collectors; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.apache.sysml.hops.DataOp; import org.apache.sysml.hops.FunctionOp; import org.apache.sysml.hops.Hop; @@ -35,8 +35,6 @@ 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; /** @@ -90,9 +88,12 @@ public class HopDagValidator { //check visit status final boolean seen = !state.seen.add(id); - check(seen == hop.isVisited(), hop, - "(parents: %s) seen previously is %b but does not match hop visit status", - Lists.transform(hop.getParent(), Hop::getHopID), seen); + if (seen != hop.isVisited()) { + String parentIDs = hop.getParent().stream() + .map(h -> Long.toString(h.getHopID())).collect(Collectors.joining(", ")); + //noinspection ConstantConditions + check(false, hop, parentIDs, 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/87cc5ee6/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 fe2a5d0..c2c3b11 100644 --- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java +++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteElementwiseMultChainOptimization.java @@ -21,6 +21,7 @@ package org.apache.sysml.hops.rewrite; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; @@ -34,9 +35,6 @@ import org.apache.sysml.hops.HopsException; import org.apache.sysml.hops.LiteralOp; import org.apache.sysml.parser.Expression; -import com.google.common.collect.HashMultiset; -import com.google.common.collect.Multiset; - /** * Prerequisite: RewriteCommonSubexpressionElimination must run before this rule. * @@ -79,7 +77,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule { if (isBinaryMult(root)) { final Hop left = root.getInput().get(0), right = root.getInput().get(1); final Set<BinaryOp> emults = new HashSet<>(); - final Multiset<Hop> leaves = HashMultiset.create(); + final Map<Hop, Integer> leaves = new HashMap<>(); // poor man's HashMultiset findEMultsAndLeaves((BinaryOp)root, emults, leaves); // 2. Ensure it is profitable to do a rewrite. @@ -101,7 +99,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule { final Hop newRoot = HopRewriteUtils.rewireAllParentChildReferences(root, replacement); // 6. Recurse at leaves (no need to repeat the interior emults) - for (final Hop leaf : leaves.elementSet()) { + for (final Hop leaf : leaves.keySet()) { recurseInputs(leaf); } return newRoot; @@ -123,15 +121,15 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule { } } - private static Hop constructReplacement(final Set<BinaryOp> emults, final Multiset<Hop> leaves) { + private static Hop constructReplacement(final Set<BinaryOp> emults, final Map<Hop, Integer> 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(); + for (final Map.Entry<Hop, Integer> entry : leaves.entrySet()) { + final Hop h = entry.getKey(); // 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.put(h, entry.getValue()); } // sorted contains all leaves, sorted by data type, stripped from their parents @@ -244,7 +242,8 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule { * @param emults Out parameter. The set of BinaryOp element-wise multiply hops in the emult chain (including root). * @param leaves Out parameter. The multiset of multiplicands in the emult chain. */ - private static void findEMultsAndLeaves(final BinaryOp root, final Set<BinaryOp> emults, final Multiset<Hop> leaves) { + private static void findEMultsAndLeaves(final BinaryOp root, final Set<BinaryOp> emults, + final Map<Hop, Integer> leaves) { // Because RewriteCommonSubexpressionElimination already ran, it is safe to compare by equality. emults.add(root); @@ -257,12 +256,16 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule { if (isBinaryMult(left)) findEMultsAndLeaves((BinaryOp) left, emults, leaves); else - leaves.add(left); + addMultiset(leaves, left); if (isBinaryMult(right)) findEMultsAndLeaves((BinaryOp) right, emults, leaves); else - leaves.add(right); + addMultiset(leaves, right); + } + + private static <K> void addMultiset(final Map<K,Integer> map, final K k) { + map.put(k, map.getOrDefault(k, 0) + 1); } /** @@ -271,7 +274,7 @@ public class RewriteElementwiseMultChainOptimization extends HopRewriteRule { * @param leaves The multiset of multiplicands in the emult chain. * @return If the multiset is worth optimizing. */ - private static boolean isOptimizable(Set<BinaryOp> emults, final Multiset<Hop> leaves) { + private static boolean isOptimizable(final Set<BinaryOp> emults, final Map<Hop, Integer> leaves) { return emults.size() >= 2; } }
