You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2016/06/22 04:03:54 UTC

incubator-systemml git commit: [HOTFIX][SYSTEMML-753] Fix filenames unpinned update-in-place variables

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 <mb...@us.ibm.com>
Authored: Tue Jun 21 21:01:06 2016 -0700
Committer: Matthias Boehm <mb...@us.ibm.com>
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() )