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() )

Reply via email to