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