[SYSTEMML-1715] Fix parfor data partitioning (access pattern analysis) This patch fixes null pointer exceptions on parfor data partitioning rewrites w/ complex indexing expressions that cannot be parsed into a linear function for analysis (e.g., in case of variables).
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/723a7517 Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/723a7517 Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/723a7517 Branch: refs/heads/master Commit: 723a7517ab937096135e911631c18188a634a922 Parents: 1001b3f Author: Matthias Boehm <[email protected]> Authored: Fri Jun 16 22:12:55 2017 -0700 Committer: Matthias Boehm <[email protected]> Committed: Sat Jun 17 13:11:35 2017 -0700 ---------------------------------------------------------------------- .../sysml/parser/ParForStatementBlock.java | 22 ++++++++++---------- .../controlprogram/ParForProgramBlock.java | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/723a7517/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java b/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java index 784df63..4dc06bd 100644 --- a/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java +++ b/src/main/java/org/apache/sysml/parser/ParForStatementBlock.java @@ -1894,7 +1894,7 @@ public class ParForStatementBlock extends ForStatementBlock { ret = rParseBinaryExpression((BinaryExpression) l); Long cvalR = parseLongConstant(r); - if( cvalR != null ) + if( ret != null && cvalR != null ) ret.addConstant(cvalR); else return null; @@ -1903,7 +1903,7 @@ public class ParForStatementBlock extends ForStatementBlock { ret = rParseBinaryExpression((BinaryExpression) r); Long cvalL = parseLongConstant(l); - if( cvalL != null ) + if( ret != null && cvalL != null ) ret.addConstant(cvalL); else return null; @@ -1926,19 +1926,19 @@ public class ParForStatementBlock extends ForStatementBlock if( l instanceof BinaryExpression) { ret = rParseBinaryExpression((BinaryExpression) l); - //change to plus - Long cvalR = parseLongConstant(r); - ret.addConstant(cvalR*(-1)); + if( ret != null ) //change to plus + ret.addConstant(parseLongConstant(r)*(-1)); } else if (r instanceof BinaryExpression) { ret = rParseBinaryExpression((BinaryExpression) r); - //change to plus - ret._a*=(-1); - for( int i=0; i<ret._b.length; i++ ) - ret._b[i]*=(-1); - Long cvalL = parseLongConstant(l); - ret.addConstant(cvalL); + if( ret != null ) { //change to plus + ret._a*=(-1); + for( int i=0; i<ret._b.length; i++ ) + ret._b[i]*=(-1); + Long cvalL = parseLongConstant(l); + ret.addConstant(cvalL); + } } else // atomic case { http://git-wip-us.apache.org/repos/asf/systemml/blob/723a7517/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java b/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java index 4387362..32f105b 100644 --- a/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java +++ b/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java @@ -116,7 +116,7 @@ import org.apache.sysml.yarn.ropt.YarnClusterAnalyzer; * the independent iterations in parallel. See ParForStatementBlock for the loop dependency * analysis. At runtime level, iterations are guaranteed to be completely independent. * - * NEW FUNCTIONALITIES (not for BI 2.0 release) + * NEW FUNCTIONALITIES * TODO: reduction variables (operations: +=, -=, /=, *=, min, max) * TODO: papply(A,1:2,FUN) language construct (compiled to ParFOR) via DML function repository => modules OK, but second-order functions required *
