You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@systemml.apache.org by "Matthias Boehm (JIRA)" <ji...@apache.org> on 2016/06/03 07:30:59 UTC

[jira] [Closed] (SYSTEMML-714) Compile error on rewrite 'pushdown sum on binary' w/ multiple consumers

     [ https://issues.apache.org/jira/browse/SYSTEMML-714?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Matthias Boehm closed SYSTEMML-714.
-----------------------------------

> Compile error on rewrite 'pushdown sum on binary' w/ multiple consumers
> -----------------------------------------------------------------------
>
>                 Key: SYSTEMML-714
>                 URL: https://issues.apache.org/jira/browse/SYSTEMML-714
>             Project: SystemML
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: SystemML 0.10
>            Reporter: Matthias Boehm
>             Fix For: SystemML 0.11
>
>
> The dynamic simplification rewrite 'pushdown sum on binary +' with multiple consumers creates a HOP DAG corruption leading to compilation errors. Consider the following script as an example
> {code}
> A = rand(rows=10, cols=1);
> B = rand(rows=10, cols=1);
> C = rand(rows=10, cols=1);
> D = rand(rows=10, cols=1);
> r1 = sum(A*B + C*D);
> r2 = r1;
> print("ret1="+r1+", ret2="+r2);
> {code} 
> The trace of applied rewrites is as follows
> {code}
> DEBUG rewrite.RewriteAlgebraicSimplificationDynamic: Applied pushdownSumOnAdditiveBinary.
> DEBUG rewrite.RewriteAlgebraicSimplificationDynamic: Applied simplifyDotProductSum.
> DEBUG rewrite.RewriteAlgebraicSimplificationDynamic: Applied fuseDatagenReorgOperation.
> DEBUG rewrite.RewriteAlgebraicSimplificationDynamic: Applied simplifyDotProductSum.
> DEBUG rewrite.RewriteAlgebraicSimplificationDynamic: Applied fuseDatagenReorgOperation
> {code}
> Finally, this issue results in the following or similar exception on subsequent rewrites:
> {code}
> Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
>         at java.util.ArrayList.rangeCheck(ArrayList.java:653)
>         at java.util.ArrayList.get(ArrayList.java:429)
>         at org.apache.sysml.hops.rewrite.RewriteAlgebraicSimplificationDynamic.simplifyColwiseAggregate(RewriteAlgebraicSimplificationDynamic.java:566)
>         at org.apache.sysml.hops.rewrite.RewriteAlgebraicSimplificationDynamic.rule_AlgebraicSimplification(RewriteAlgebraicSimplificationDynamic.java:154)
>         at org.apache.sysml.hops.rewrite.RewriteAlgebraicSimplificationDynamic.rule_AlgebraicSimplification(RewriteAlgebraicSimplificationDynamic.java:185)
>         at org.apache.sysml.hops.rewrite.RewriteAlgebraicSimplificationDynamic.rewriteHopDAGs(RewriteAlgebraicSimplificationDynamic.java:91)
>         at org.apache.sysml.hops.rewrite.ProgramRewriter.rewriteHopDAGs(ProgramRewriter.java:279)
>         at org.apache.sysml.hops.rewrite.ProgramRewriter.rewriteStatementBlockHopDAGs(ProgramRewriter.java:263)
>         at org.apache.sysml.hops.rewrite.ProgramRewriter.rewriteProgramHopDAGs(ProgramRewriter.java:206)
>         at org.apache.sysml.parser.DMLTranslator.rewriteHopsDAG(DMLTranslator.java:273)
>         at org.apache.sysml.api.DMLScript.execute(DMLScript.java:602)
>         at org.apache.sysml.api.DMLScript.executeScript(DMLScript.java:337)
> {code}
> The issue is caused by incorrect handling of multiple parents in the rewrite 'pushdown sum on binary +'. The workaround is to disable rewrites (optimization level 1 instead 2) or to create a "if(1==1){}" cut right after the sum (preferred workaround).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)