You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by ac...@apache.org on 2016/03/07 21:06:17 UTC
incubator-systemml git commit: [SYSTEMML-410] Fix UpdateInPlace
intermediate candidate
Repository: incubator-systemml
Updated Branches:
refs/heads/master 354ec0217 -> 28467c3fe
[SYSTEMML-410] Fix UpdateInPlace intermediate candidate
Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/28467c3f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/28467c3f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/28467c3f
Branch: refs/heads/master
Commit: 28467c3fea6b8ed86ecfdc7d321bbd2390745010
Parents: 354ec02
Author: Arvind Surve <ac...@yahoo.com>
Authored: Mon Mar 7 12:05:56 2016 -0800
Committer: Arvind Surve <ac...@yahoo.com>
Committed: Mon Mar 7 12:05:56 2016 -0800
----------------------------------------------------------------------
.../java/org/apache/sysml/hops/DataGenOp.java | 3 +-
.../apache/sysml/hops/recompile/Recompiler.java | 2 +-
.../parfor/opt/OptimizerConstrained.java | 4 +-
.../parfor/opt/OptimizerRuleBased.java | 99 +++++++++++++++-----
.../instructions/cp/VariableCPInstruction.java | 3 +-
.../java/org/apache/sysml/utils/Explain.java | 4 +-
.../java/org/apache/sysml/utils/Statistics.java | 16 ++++
.../updateinplace/UpdateInPlaceTest.java | 48 ++++++----
.../functions/updateinplace/updateinplace10.dml | 2 +
9 files changed, 130 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/main/java/org/apache/sysml/hops/DataGenOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/DataGenOp.java b/src/main/java/org/apache/sysml/hops/DataGenOp.java
index c8d7fc4..c584d9c 100644
--- a/src/main/java/org/apache/sysml/hops/DataGenOp.java
+++ b/src/main/java/org/apache/sysml/hops/DataGenOp.java
@@ -168,7 +168,8 @@ public class DataGenOp extends Hop implements MultiThreadedHop
(getRowsInBlock()>0)?getRowsInBlock():DMLTranslator.DMLBlockSize,
(getColsInBlock()>0)?getColsInBlock():DMLTranslator.DMLBlockSize,
//actual rand nnz might differ (in cp/mr they are corrected after execution)
- (_op==DataGenMethod.RAND && et==ExecType.SPARK && getNnz()!=0) ? -1 : getNnz() );
+ (_op==DataGenMethod.RAND && et==ExecType.SPARK && getNnz()!=0) ? -1 : getNnz(),
+ getUpdateInPlace());
setLineNumbers(rnd);
setLops(rnd);
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java b/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
index 0f2add5..aa0eb03 100644
--- a/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
+++ b/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
@@ -905,7 +905,7 @@ public class Recompiler
}
-
+
/**
*
* @param oldCallVars
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
index 3c67bd7..5f3fb75 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerConstrained.java
@@ -162,7 +162,7 @@ public class OptimizerConstrained extends OptimizerRuleBased
//rewrite 14:
HashSet<String> inplaceResultVars = new HashSet<String>();
- super.rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars);
+ super.rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars, ec);
//rewrite 15:
super.rewriteDisableCPCaching(pn, inplaceResultVars, ec.getVariables());
@@ -178,7 +178,7 @@ public class OptimizerConstrained extends OptimizerRuleBased
// rewrite 14: set in-place result indexing
HashSet<String> inplaceResultVars = new HashSet<String>();
- super.rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars);
+ super.rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars, ec);
if( !OptimizerUtils.isSparkExecutionMode() ) {
// rewrite 16: runtime piggybacking
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
index 6c4d254..6d17a06 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
@@ -35,6 +35,7 @@ import org.apache.hadoop.fs.Path;
import org.apache.sysml.conf.ConfigurationManager;
import org.apache.sysml.conf.DMLConfig;
import org.apache.sysml.hops.AggBinaryOp;
+import org.apache.sysml.hops.DataGenOp;
import org.apache.sysml.hops.DataOp;
import org.apache.sysml.hops.FunctionOp;
import org.apache.sysml.hops.Hop;
@@ -101,6 +102,7 @@ import org.apache.sysml.runtime.matrix.MatrixFormatMetaData;
import org.apache.sysml.runtime.matrix.data.MatrixBlock;
import org.apache.sysml.runtime.matrix.data.OutputInfo;
import org.apache.sysml.runtime.matrix.data.SparseRow;
+import org.apache.sysml.utils.Explain;
import org.apache.sysml.yarn.ropt.YarnClusterAnalyzer;
/**
@@ -155,7 +157,7 @@ public class OptimizerRuleBased extends Optimizer
public static final boolean APPLY_REWRITE_NESTED_PARALLELISM = false;
public static final String FUNCTION_UNFOLD_NAMEPREFIX = "__unfold_";
- public static final boolean APPLY_REWRITE_UPDATE_INPLACE_INTERMEDIATE = false;
+ public static final boolean APPLY_REWRITE_UPDATE_INPLACE_INTERMEDIATE = true;
public static final double PAR_K_FACTOR = OptimizationWrapper.PAR_FACTOR_INFRASTRUCTURE;
public static final double PAR_K_MR_FACTOR = 1.0 * OptimizationWrapper.PAR_FACTOR_INFRASTRUCTURE;
@@ -290,7 +292,7 @@ public class OptimizerRuleBased extends Optimizer
// rewrite 14: set in-place result indexing
HashSet<String> inplaceResultVars = new HashSet<String>();
- rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars);
+ rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars, ec);
// rewrite 15: disable caching
rewriteDisableCPCaching(pn, inplaceResultVars, ec.getVariables());
@@ -305,7 +307,7 @@ public class OptimizerRuleBased extends Optimizer
// rewrite 14: set in-place result indexing
HashSet<String> inplaceResultVars = new HashSet<String>();
- rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars);
+ rewriteSetInPlaceResultIndexing(pn, M1, ec.getVariables(), inplaceResultVars, ec);
if( !OptimizerUtils.isSparkExecutionMode() ) {
// rewrite 16: runtime piggybacking
@@ -1863,7 +1865,7 @@ public class OptimizerRuleBased extends Optimizer
* @param inPlaceResultVars
* @throws DMLRuntimeException
*/
- protected void rewriteSetInPlaceResultIndexing(OptNode pn, double M, LocalVariableMap vars, HashSet<String> inPlaceResultVars)
+ protected void rewriteSetInPlaceResultIndexing(OptNode pn, double M, LocalVariableMap vars, HashSet<String> inPlaceResultVars, ExecutionContext ec)
throws DMLRuntimeException
{
//assertions (warnings of corrupt optimizer decisions)
@@ -1933,11 +1935,11 @@ public class OptimizerRuleBased extends Optimizer
if (uipCandHopList != null) {
for (UIPCandidateHop uipCandHop: uipCandHopList)
- if(uipCandHop.isLoopApplicable() && uipCandHop.isUpdateInPlace())
+ if(uipCandHop.isIntermediate() && uipCandHop.isLoopApplicable() && uipCandHop.isUpdateInPlace())
{
uipCandHop.getHop().setUpdateInPlace(true);
bAnyUIPApplicable = true;
-
+
if(LOG.isDebugEnabled())
listUIPRes.get().add(uipCandHop.getHop().getName());
}
@@ -1945,8 +1947,9 @@ public class OptimizerRuleBased extends Optimizer
}
if(bAnyUIPApplicable)
try {
- //Recompile this block if there is any update in place applicable.
- Recompiler.recompileProgramBlockInstructions(pfpb); //TODO: Recompile @ very high level ok?
+ //Recompile this block recursively if there is any update in place applicable.
+ LocalVariableMap localVaraibleMap = (LocalVariableMap) ec.getVariables().clone();
+ Recompiler.recompileProgramBlockHierarchy(pfpb.getChildBlocks(), localVaraibleMap, 0L, true);
}
catch(Exception ex){
throw new DMLRuntimeException(ex);
@@ -1956,7 +1959,9 @@ public class OptimizerRuleBased extends Optimizer
if(APPLY_REWRITE_UPDATE_INPLACE_INTERMEDIATE && LOG.isTraceEnabled())
{
- LOG.trace("UpdateInPlace = " + apply + " for lines between " + pn.getBeginLine() + " and " + pn.getEndLine());
+ LOG.trace("UpdateInPlace = " + apply + " for lines between " + pn.getBeginLine() + " and " + pn.getEndLine()
+ + " for " + uipCandHopHM.size() + " intermediate matrix objects:" + uipCandHopHM.keySet().toString());
+
for(Entry<String, ArrayList <UIPCandidateHop>> entry: uipCandHopHM.entrySet())
{
ArrayList <UIPCandidateHop> uipCandHopList = entry.getValue();
@@ -1964,8 +1969,18 @@ public class OptimizerRuleBased extends Optimizer
if (uipCandHopList != null) {
for (UIPCandidateHop uipCandHop: uipCandHopList)
{
- LOG.trace("Matrix Object: Name: " + uipCandHop.getHop().getName() + "<" + uipCandHop.getHop().getBeginLine() + "," + uipCandHop.getHop().getEndLine()+ ">, InLoop:"
- + uipCandHop.isLoopApplicable() + ", UIPApplicable:" + uipCandHop.isUpdateInPlace() + ", HopUIPApplicable:" + uipCandHop.getHop().getUpdateInPlace());
+ if(uipCandHop.getHop() != null)
+ {
+ LOG.trace("Matrix Object: Name: " + uipCandHop.getHop().getName() + "<" + uipCandHop.getHop().getBeginLine() + "," + uipCandHop.getHop().getEndLine()+ ">, InLoop:"
+ + uipCandHop.isLoopApplicable() + ", UIPApplicable:" + uipCandHop.isUpdateInPlace() + ", HopUIPApplicable:" + uipCandHop.getHop().getUpdateInPlace());
+ LOG.trace("Explain Candidate HOP after recompile");
+ LOG.trace(Explain.explain(uipCandHop.getHop()));
+ }
+ else
+ {
+ LOG.trace("Matrix Object: Name: " + uipCandHop.getLixHop().getName() + "<" + uipCandHop.getLixHop().getBeginLine() + "," + uipCandHop.getLixHop().getEndLine()+ ">, InLoop:"
+ + uipCandHop.isLoopApplicable() + ", Not an Intermediate matrix object");
+ }
}
}
}
@@ -2024,7 +2039,7 @@ public class OptimizerRuleBased extends Optimizer
{
rIsInLoop(pn, uipCandHopHM, false);
- // Prune candidate list based on non-existance of candidate in the loop
+ // Prune candidate list based on non-existance of intermediate candidate in the loop
Iterator<Map.Entry<String, ArrayList <UIPCandidateHop>>> uipCandHopHMIter = uipCandHopHM.entrySet().iterator();
while(uipCandHopHMIter.hasNext())
{
@@ -2035,12 +2050,18 @@ public class OptimizerRuleBased extends Optimizer
for (Iterator<UIPCandidateHop> uipCandHopListIter = uipCandHopList.iterator(); uipCandHopListIter.hasNext();)
{
UIPCandidateHop uipCandHop = uipCandHopListIter.next();
- if (!uipCandHop.isLoopApplicable()) //If Loop is not applicable then remove it from the list.
+ if (!uipCandHop.isIntermediate() || !uipCandHop.isLoopApplicable()) //If Loop is not applicable then remove it from the list.
{
uipCandHopListIter.remove();
if(LOG.isTraceEnabled())
- LOG.trace("Matrix Object: Name: " + uipCandHop.getHop().getName() + "<" + uipCandHop.getHop().getBeginLine() + "," + uipCandHop.getHop().getEndLine()+
- ">, removed from the candidate list as it does not have loop criteria applicable.");
+ {
+ if (!uipCandHop.isIntermediate())
+ LOG.trace("Matrix Object: Name: " + uipCandHop.getLixHop().getName() + "<" + uipCandHop.getLixHop().getBeginLine() + "," + uipCandHop.getLixHop().getEndLine()+
+ ">, removed from the candidate list as it is not an intermediate matrix object.");
+ else
+ LOG.trace("Matrix Object: Name: " + uipCandHop.getLixHop().getName() + "<" + uipCandHop.getLixHop().getBeginLine() + "," + uipCandHop.getLixHop().getEndLine()+
+ ">, removed from the candidate list as it does not have loop criteria applicable.");
+ }
}
}
if(uipCandHopList.isEmpty())
@@ -2074,7 +2095,7 @@ public class OptimizerRuleBased extends Optimizer
{
uipCandHopListIter.remove();
if(LOG.isTraceEnabled())
- LOG.trace("Matrix Object: Name: " + uipCandHop.getHop().getName() + "<" + uipCandHop.getHop().getBeginLine() + "," + uipCandHop.getHop().getEndLine()+
+ LOG.trace("Matrix Object: Name: " + uipCandHop.getLixHop().getName() + "<" + uipCandHop.getLixHop().getBeginLine() + "," + uipCandHop.getLixHop().getEndLine()+
">, removed from the candidate list as one of the consumer is FunctionOp.");
break;
}
@@ -2135,7 +2156,7 @@ public class OptimizerRuleBased extends Optimizer
rIsInLoop(optNode, uipCandHopHM, bLoop);
}
}
- else if(bInLoop)
+ else
{
Hop hop = (Hop) OptTreeConverter.getAbstractPlanMapping().getMappedHop(pn.getID());
@@ -2147,8 +2168,16 @@ public class OptimizerRuleBased extends Optimizer
{
for (UIPCandidateHop uipCandHop: uipCandHopList)
{
+ //Identify where intermediate object has been defined.
+ if (hop instanceof DataGenOp && hop.getName().equals(uipCandHop.getLixHop().getName()))
+ {
+ uipCandHop.setHop(hop);
+ uipCandHop.setLocation(hop.getBeginLine());
+ uipCandHop.setIntermediate(true);
+ }
+
//Update if candiate hop defined outside this loop, and leftindexing is within this loop.
- if (uipCandHop.getLocation() <= hop.getBeginLine() && uipCandHop.getHop().getBeginLine() <= hop.getEndLine())
+ if ((bInLoop) && (uipCandHop.getLocation() <= hop.getBeginLine() && uipCandHop.getLixHop().getBeginLine() <= hop.getEndLine()))
uipCandHop.setIsLoopApplicable(true);
}
}
@@ -2725,8 +2754,8 @@ public class OptimizerRuleBased extends Optimizer
uipCandidateHM.put(uipCandiateID, uipCandiHopList);
StatementBlock sb = (StatementBlock) OptTreeConverter.getAbstractPlanMapping().getMappedProg(OptTreeConverter.getAbstractPlanMapping().getMappedParentID(n.getID()))[0];
- if(LOG.isDebugEnabled())
- LOG.debug("Candidate Hop:" + h.getName() + "<" + h.getBeginLine() + "," + h.getEndLine() + ">,<" +
+ if(LOG.isTraceEnabled())
+ LOG.trace("Candidate Hop:" + h.getName() + "<" + h.getBeginLine() + "," + h.getEndLine() + ">,<" +
h.getBeginColumn() + "," + h.getEndColumn() + "> PB:" + "<" + pb.getBeginLine() + "," + pb.getEndLine() + ">,<" +
pb.getBeginColumn() + "," + pb.getEndColumn() + "> SB:" + "<" + sb.getBeginLine() + "," + sb.getEndLine() + ">,<" +
sb.getBeginColumn() + "," + sb.getEndColumn() + ">");
@@ -3894,22 +3923,32 @@ public class OptimizerRuleBased extends Optimizer
* as location, flag to indicate if its in loop (for, parfor, while), flag to indicate if hop can be marked as "UpdateInPlace".
*/
class UIPCandidateHop {
- Hop hop;
+ Hop hopCandidate, hopLix;
int iLocation = -1;
ProgramBlock pb;
- Boolean bIsLoopApplicable = false, bUpdateInPlace = true;
+ Boolean bIntermediate = false, bIsLoopApplicable = false, bUpdateInPlace = true;
ArrayList<Hop> consumerHops = null;
- UIPCandidateHop(Hop hop, ProgramBlock pb)
+ UIPCandidateHop(Hop hopLix, ProgramBlock pb)
{
- this.hop = hop;
+ this.hopLix = hopLix;
this.pb = pb;
}
+ Hop getLixHop()
+ {
+ return hopLix;
+ }
+
Hop getHop()
{
- return hop;
+ return hopCandidate;
+ }
+
+ void setHop(Hop hopCandidate)
+ {
+ this.hopCandidate = hopCandidate;
}
ProgramBlock getProgramBlock()
@@ -3927,6 +3966,16 @@ public class OptimizerRuleBased extends Optimizer
this.iLocation = iLocation;
}
+ boolean isIntermediate()
+ {
+ return(bIntermediate);
+ }
+
+ void setIntermediate(boolean bIntermediate)
+ {
+ this.bIntermediate = bIntermediate;
+ }
+
boolean isLoopApplicable()
{
return(bIsLoopApplicable);
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
index 22bd2ab..dac114b 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/VariableCPInstruction.java
@@ -22,6 +22,7 @@ package org.apache.sysml.runtime.instructions.cp;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
+import org.apache.sysml.api.DMLScript;
import org.apache.sysml.lops.Lop;
import org.apache.sysml.lops.UnaryCP;
import org.apache.sysml.parser.Expression.DataType;
@@ -446,7 +447,7 @@ public class VariableCPInstruction extends CPInstruction
mobj.setFileFormatProperties(formatProperties);
mobj.enableUpdateInPlace(updateInPlace);
ec.setVariable(input1.getName(), mobj);
- if(updateInPlace)
+ if(DMLScript.STATISTICS && updateInPlace)
Statistics.incrementTotalUIPVar();
}
else if ( input1.getDataType() == DataType.SCALAR ){
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/main/java/org/apache/sysml/utils/Explain.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/utils/Explain.java b/src/main/java/org/apache/sysml/utils/Explain.java
index 1986265..c070378 100644
--- a/src/main/java/org/apache/sysml/utils/Explain.java
+++ b/src/main/java/org/apache/sysml/utils/Explain.java
@@ -28,9 +28,7 @@ import java.util.Map.Entry;
import org.apache.sysml.api.DMLException;
import org.apache.sysml.hops.FunctionOp;
import org.apache.sysml.hops.Hop;
-import org.apache.sysml.hops.Hop.DataOpTypes;
import org.apache.sysml.hops.Hop.VisitStatus;
-import org.apache.sysml.hops.DataOp;
import org.apache.sysml.hops.HopsException;
import org.apache.sysml.hops.LiteralOp;
import org.apache.sysml.hops.OptimizerUtils;
@@ -686,7 +684,7 @@ public class Explain
+ hop.getColsInBlock() + ","
+ hop.getNnz());
- if (hop instanceof DataOp && ((DataOp)hop).getDataOpType() == DataOpTypes.TRANSIENTREAD && hop.getUpdateInPlace())
+ if (hop.getUpdateInPlace())
sb.append("," + hop.getUpdateInPlace());
sb.append("]");
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/main/java/org/apache/sysml/utils/Statistics.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/utils/Statistics.java b/src/main/java/org/apache/sysml/utils/Statistics.java
index ce133ff..a517136 100644
--- a/src/main/java/org/apache/sysml/utils/Statistics.java
+++ b/src/main/java/org/apache/sysml/utils/Statistics.java
@@ -159,14 +159,26 @@ public class Statistics
iNoOfCompiledSPInst ++;
}
+ public static long getTotalUIPVar() {
+ return lTotalUIPVar.get();
+ }
+
public static void incrementTotalUIPVar() {
lTotalUIPVar.incrementAndGet();
}
+ public static long getTotalLixUIP() {
+ return lTotalLixUIP.get();
+ }
+
public static void incrementTotalLixUIP() {
lTotalLixUIP.incrementAndGet();
}
+ public static long getTotalLix() {
+ return lTotalLix.get();
+ }
+
public static void incrementTotalLix() {
lTotalLix.incrementAndGet();
}
@@ -320,6 +332,10 @@ public class Statistics
parforInitTime = 0;
parforMergeTime = 0;
+ lTotalLix.set(0);
+ lTotalLixUIP.set(0);
+ lTotalUIPVar.set(0);
+
resetJITCompileTime();
resetJVMgcTime();
resetJVMgcCount();
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/test/java/org/apache/sysml/test/integration/functions/updateinplace/UpdateInPlaceTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/updateinplace/UpdateInPlaceTest.java b/src/test/java/org/apache/sysml/test/integration/functions/updateinplace/UpdateInPlaceTest.java
index 503a42f..062a680 100644
--- a/src/test/java/org/apache/sysml/test/integration/functions/updateinplace/UpdateInPlaceTest.java
+++ b/src/test/java/org/apache/sysml/test/integration/functions/updateinplace/UpdateInPlaceTest.java
@@ -29,6 +29,7 @@ import org.apache.sysml.runtime.controlprogram.parfor.opt.OptimizerRuleBased;
import org.apache.sysml.test.integration.AutomatedTestBase;
import org.apache.sysml.test.integration.TestConfiguration;
import org.apache.sysml.test.utils.TestUtils;
+import org.apache.sysml.utils.Statistics;
public class UpdateInPlaceTest extends AutomatedTestBase
{
@@ -101,13 +102,12 @@ public class UpdateInPlaceTest extends AutomatedTestBase
addTestConfiguration(TEST_NAME, new TestConfiguration(TEST_CLASS_DIR, TEST_NAME, null));
}
- //public void testUIPOverlapStatement(1)
@Test
public void testUIP()
{
List<String> listUIPRes = Arrays.asList("A");
- runUpdateInPlaceTest(TEST_NAME, 1, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 1, listUIPRes, 2, 4, 4);
}
@Test
@@ -115,7 +115,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 2, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 2, listUIPRes, 0, 0, 4);
}
@Test
@@ -123,7 +123,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 3, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 3, listUIPRes, 0, 0, 4);
}
@Test
@@ -131,7 +131,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList("A");
- runUpdateInPlaceTest(TEST_NAME, 4, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 4, listUIPRes, 2, 4, 4);
}
@Test
@@ -139,7 +139,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 5, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 5, listUIPRes, 0, 0, 4);
}
@Test
@@ -147,7 +147,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 6, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 6, listUIPRes, 0, 0, 4);
}
@Test
@@ -155,7 +155,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 7, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 7, listUIPRes, 0, 0, 4);
}
@Test
@@ -163,7 +163,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 8, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 8, listUIPRes, 0, 0, 4);
}
@Test
@@ -171,7 +171,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 9, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 9, listUIPRes, 0, 0, 4);
}
@Test
@@ -179,7 +179,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 10, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 10, listUIPRes, 0, 0, 12);
}
@Test
@@ -187,7 +187,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 11, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 11, listUIPRes, 0, 0, 8);
}
@Test
@@ -195,7 +195,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 12, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 12, listUIPRes, 0, 0, 4);
}
@Test
@@ -203,7 +203,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 13, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 13, listUIPRes, 0, 0, 4);
}
@Test
@@ -211,7 +211,7 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList("A");
- runUpdateInPlaceTest(TEST_NAME, 14, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 14, listUIPRes, 2, 4, 8);
}
@Test
@@ -219,17 +219,16 @@ public class UpdateInPlaceTest extends AutomatedTestBase
{
List<String> listUIPRes = Arrays.asList();
- runUpdateInPlaceTest(TEST_NAME, 15, listUIPRes);
+ runUpdateInPlaceTest(TEST_NAME, 15, listUIPRes, 0, 0, 4);
}
-
/**
*
* @param TEST_NAME
* @param iTestNumber
* @param listUIPRes
*/
- private void runUpdateInPlaceTest( String TEST_NAME, int iTestNumber, List<String> listUIPExp )
+ private void runUpdateInPlaceTest( String TEST_NAME, int iTestNumber, List<String> listUIPExp, long lTotalUIPVar, long lTotalLixUIP, long lTotalLix)
{
try
{
@@ -272,6 +271,19 @@ public class UpdateInPlaceTest extends AutomatedTestBase
" does not match with the # of matrix objects " + "0" + " from optimization result.",
(listUIPRes == null || listUIPRes.size() == 0));
}
+
+ Assert.assertTrue("Expected # of UpdateInPlace create variables of type matrix " + lTotalUIPVar +
+ " does not match with the # of UpdateInPlace create variables of type matrix objects " + Statistics.getTotalUIPVar() + " from optimization result.",
+ (Statistics.getTotalUIPVar() == lTotalUIPVar));
+
+ Assert.assertTrue("Expected # of UpdateInPlace LeftIndexing " + lTotalLixUIP +
+ " does not match with the # of UpdateInPlace LeftIndexing " + Statistics.getTotalLixUIP() + " from optimization result.",
+ (Statistics.getTotalLixUIP() == lTotalLixUIP));
+
+ Assert.assertTrue("Expected # of total LeftIndexing " + lTotalLix +
+ " does not match with the # of total LeftIndexing " + Statistics.getTotalLix() + " from optimization result.",
+ (Statistics.getTotalLix() == lTotalLix));
+
}
}
finally{
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/28467c3f/src/test/scripts/functions/updateinplace/updateinplace10.dml
----------------------------------------------------------------------
diff --git a/src/test/scripts/functions/updateinplace/updateinplace10.dml b/src/test/scripts/functions/updateinplace/updateinplace10.dml
index 936bbfe..0d3a99a 100644
--- a/src/test/scripts/functions/updateinplace/updateinplace10.dml
+++ b/src/test/scripts/functions/updateinplace/updateinplace10.dml
@@ -31,6 +31,8 @@ parfor (j in 1:m, log=DEBUG){
if(1 == 1)
B = A
A[i,2] = j*3+i;
+ if(1 == 1)
+ B = A
A[i,3] = j*4+i;
}
}