Repository: incubator-systemml Updated Branches: refs/heads/master ba260e947 -> 3e4ceafc1
[HOTFIX][SYSTEMML-753] Fix filenames unpinned update-in-place variables This patch ensures distinct filenames for unpinned update-in-place variables to resolve write conflicts in special cases, where update-in-place variables are copied in memory, but left indexing happens in MR execution mode (e.g., with forced execution type). Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/3e4ceafc Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/3e4ceafc Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/3e4ceafc Branch: refs/heads/master Commit: 3e4ceafc1e6460f599774b8d22f7f308ccafddfc Parents: ba260e9 Author: Matthias Boehm <[email protected]> Authored: Tue Jun 21 21:01:06 2016 -0700 Committer: Matthias Boehm <[email protected]> Committed: Tue Jun 21 21:01:06 2016 -0700 ---------------------------------------------------------------------- src/main/java/org/apache/sysml/lops/Lop.java | 1 + .../org/apache/sysml/runtime/controlprogram/ForProgramBlock.java | 2 +- .../apache/sysml/runtime/controlprogram/ParForProgramBlock.java | 2 +- .../org/apache/sysml/runtime/controlprogram/ProgramBlock.java | 4 +++- .../apache/sysml/runtime/controlprogram/WhileProgramBlock.java | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3e4ceafc/src/main/java/org/apache/sysml/lops/Lop.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/lops/Lop.java b/src/main/java/org/apache/sysml/lops/Lop.java index 1ffdd10..d930da0 100644 --- a/src/main/java/org/apache/sysml/lops/Lop.java +++ b/src/main/java/org/apache/sysml/lops/Lop.java @@ -90,6 +90,7 @@ public abstract class Lop public static final String MATRIX_VAR_NAME_PREFIX = "_mVar"; public static final String FRAME_VAR_NAME_PREFIX = "_fVar"; public static final String SCALAR_VAR_NAME_PREFIX = "_Var"; + public static final String UPDATE_INPLACE_PREFIX = "_uip"; // Boolean array to hold the list of nodes(lops) in the DAG that are reachable from this lop. private boolean[] reachable = null; http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3e4ceafc/src/main/java/org/apache/sysml/runtime/controlprogram/ForProgramBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/ForProgramBlock.java b/src/main/java/org/apache/sysml/runtime/controlprogram/ForProgramBlock.java index ec2f298..b45ce37 100644 --- a/src/main/java/org/apache/sysml/runtime/controlprogram/ForProgramBlock.java +++ b/src/main/java/org/apache/sysml/runtime/controlprogram/ForProgramBlock.java @@ -135,7 +135,7 @@ public class ForProgramBlock extends ProgramBlock try { // prepare update in-place variables - UpdateType[] flags = prepareUpdateInPlaceVariables(ec); + UpdateType[] flags = prepareUpdateInPlaceVariables(ec, _tid); // run for loop body for each instance of predicate sequence SequenceIterator seqIter = new SequenceIterator(iterVarName, from, to, incr); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3e4ceafc/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 45435fa..058e46e 100644 --- a/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java +++ b/src/main/java/org/apache/sysml/runtime/controlprogram/ParForProgramBlock.java @@ -1422,7 +1422,7 @@ public class ParForProgramBlock extends ForProgramBlock ExecutionContext cpEc = ProgramConverter.createDeepCopyExecutionContext(ec); //prepare basic update-in-place variables (vars dropped on result merge) - prepareUpdateInPlaceVariables(cpEc); + prepareUpdateInPlaceVariables(cpEc, pwID); //copy compiler configuration (for jmlc w/o global config) CompilerConfig cconf = ConfigurationManager.getCompilerConfig(); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3e4ceafc/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java b/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java index cf117c6..0137071 100644 --- a/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java +++ b/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java @@ -29,6 +29,7 @@ import org.apache.sysml.conf.ConfigurationManager; import org.apache.sysml.hops.Hop; import org.apache.sysml.hops.OptimizerUtils; import org.apache.sysml.hops.recompile.Recompiler; +import org.apache.sysml.lops.Lop; import org.apache.sysml.parser.StatementBlock; import org.apache.sysml.parser.Expression.ValueType; import org.apache.sysml.runtime.DMLRuntimeException; @@ -346,7 +347,7 @@ public class ProgramBlock * @return * @throws DMLRuntimeException */ - protected UpdateType[] prepareUpdateInPlaceVariables(ExecutionContext ec) + protected UpdateType[] prepareUpdateInPlaceVariables(ExecutionContext ec, long tid) throws DMLRuntimeException { if( _sb == null || _sb.getUpdateInPlaceVars().isEmpty() ) @@ -366,6 +367,7 @@ public class ProgramBlock MatrixBlock mbVar = mo.acquireRead(); moNew.acquireModify( !mbVar.isInSparseFormat() ? new MatrixBlock(mbVar) : new MatrixBlock(mbVar, MatrixBlock.DEFAULT_INPLACE_SPARSEBLOCK, true) ); + moNew.setFileName(mo.getFileName()+Lop.UPDATE_INPLACE_PREFIX+tid); mo.release(); moNew.release(); moNew.setUpdateType(UpdateType.INPLACE); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3e4ceafc/src/main/java/org/apache/sysml/runtime/controlprogram/WhileProgramBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/WhileProgramBlock.java b/src/main/java/org/apache/sysml/runtime/controlprogram/WhileProgramBlock.java index de4684f..b77b9ea 100644 --- a/src/main/java/org/apache/sysml/runtime/controlprogram/WhileProgramBlock.java +++ b/src/main/java/org/apache/sysml/runtime/controlprogram/WhileProgramBlock.java @@ -158,7 +158,7 @@ public class WhileProgramBlock extends ProgramBlock try { // prepare update in-place variables - UpdateType[] flags = prepareUpdateInPlaceVariables(ec); + UpdateType[] flags = prepareUpdateInPlaceVariables(ec, _tid); //run loop body until predicate becomes false while( executePredicate(ec).getBooleanValue() )
