Repository: incubator-systemml Updated Branches: refs/heads/master c2893b0fd -> 24d0a1f7e
[SYSTEMML-1042] Fixing OOM when inputs of unary aggregate don't fit in driver memory Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/24d0a1f7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/24d0a1f7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/24d0a1f7 Branch: refs/heads/master Commit: 24d0a1f7e524a0b49ad7148234e04ab91b669f6c Parents: c2893b0 Author: Niketan Pansare <npan...@us.ibm.com> Authored: Wed Oct 12 17:03:26 2016 -0700 Committer: Niketan Pansare <npan...@us.ibm.com> Committed: Wed Oct 12 17:03:26 2016 -0700 ---------------------------------------------------------------------- src/main/java/org/apache/sysml/hops/AggUnaryOp.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/24d0a1f7/src/main/java/org/apache/sysml/hops/AggUnaryOp.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/AggUnaryOp.java b/src/main/java/org/apache/sysml/hops/AggUnaryOp.java index 8b44e4b..10a30fe 100644 --- a/src/main/java/org/apache/sysml/hops/AggUnaryOp.java +++ b/src/main/java/org/apache/sysml/hops/AggUnaryOp.java @@ -488,8 +488,9 @@ public class AggUnaryOp extends Hop implements MultiThreadedHop /** * * @return + * @throws HopsException */ - private boolean isTernaryAggregateRewriteApplicable() + private boolean isTernaryAggregateRewriteApplicable() throws HopsException { boolean ret = false; @@ -500,7 +501,9 @@ public class AggUnaryOp extends Hop implements MultiThreadedHop { Hop input1 = getInput().get(0); if( input1.getParent().size() == 1 && //sum single consumer - input1 instanceof BinaryOp && ((BinaryOp)input1).getOp()==OpOp2.MULT ) + input1 instanceof BinaryOp && ((BinaryOp)input1).getOp()==OpOp2.MULT + // As unary agg instruction is not implemented in MR and since MR is in maintenance mode, postponed it. + && input1.optFindExecType() != ExecType.MR) { Hop input11 = input1.getInput().get(0); Hop input12 = input1.getInput().get(1); @@ -675,8 +678,11 @@ public class AggUnaryOp extends Hop implements MultiThreadedHop //create new ternary aggregate operator int k = OptimizerUtils.getConstrainedNumThreads( _maxNumThreads ); + // The execution type of a unary aggregate instruction should depend on the execution type of inputs to avoid OOM + // Since we only support matrix-vector and not vector-matrix, checking the execution type of input1 should suffice. + ExecType et_input = input1.optFindExecType(); ret = new TernaryAggregate(in1, in2, in3, Aggregate.OperationTypes.KahanSum, - Binary.OperationTypes.MULTIPLY, DataType.SCALAR, ValueType.DOUBLE, et, k); + Binary.OperationTypes.MULTIPLY, DataType.SCALAR, ValueType.DOUBLE, et_input, k); return ret; }