[SYSTEMML-2431] Fix codegen multi-agg compilation w/ interleaved MMs

This patch fixes special cases of compiling code generation plans of
multi-aggregates with interleaved matrix multiplications (e.g.,
t(X)%*%X, t(X)%*Y, t(Y)%*%Y) over transient reads which require
dedicated handling of data operators.


Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/f1bf97ba
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/f1bf97ba
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/f1bf97ba

Branch: refs/heads/master
Commit: f1bf97baf342035764c676b50d361e36e2bbae62
Parents: d065c3d
Author: Matthias Boehm <[email protected]>
Authored: Thu Jul 12 17:46:30 2018 -0700
Committer: Matthias Boehm <[email protected]>
Committed: Thu Jul 12 17:46:30 2018 -0700

----------------------------------------------------------------------
 .../sysml/hops/codegen/template/TemplateCell.java     | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/f1bf97ba/src/main/java/org/apache/sysml/hops/codegen/template/TemplateCell.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/hops/codegen/template/TemplateCell.java 
b/src/main/java/org/apache/sysml/hops/codegen/template/TemplateCell.java
index 3789b3f..d4cb8fc 100644
--- a/src/main/java/org/apache/sysml/hops/codegen/template/TemplateCell.java
+++ b/src/main/java/org/apache/sysml/hops/codegen/template/TemplateCell.java
@@ -188,11 +188,17 @@ public class TemplateCell extends TemplateBase
                                && (me.type!=TemplateType.MAGG || 
memo.contains(c.getHopID(), TemplateType.CELL)))
                                rConstructCplan(c, memo, tmp, inHops, 
compileLiterals);
                        else if( me!=null && (me.type==TemplateType.MAGG || 
me.type==TemplateType.CELL) 
-                                       && 
HopRewriteUtils.isMatrixMultiply(hop) && i==0 ) //skip transpose
-                               rConstructCplan(c.getInput().get(0), memo, tmp, 
inHops, compileLiterals);
+                                       && 
HopRewriteUtils.isMatrixMultiply(hop) && i==0 ) { //skip transpose
+                               if( c.getInput().get(0) instanceof DataOp ) {
+                                       tmp.put(c.getInput().get(0).getHopID(),
+                                               
TemplateUtils.createCNodeData(c.getInput().get(0), compileLiterals));
+                                       inHops.add(c.getInput().get(0));
+                               }
+                               else
+                                       rConstructCplan(c.getInput().get(0), 
memo, tmp, inHops, compileLiterals);
+                       }
                        else {
-                               CNodeData cdata = 
TemplateUtils.createCNodeData(c, compileLiterals);
-                               tmp.put(c.getHopID(), cdata);
+                               tmp.put(c.getHopID(), 
TemplateUtils.createCNodeData(c, compileLiterals));
                                inHops.add(c);
                        }
                }

Reply via email to