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;
        }

Reply via email to