You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by ar...@apache.org on 2020/06/21 16:38:46 UTC
[systemml] branch master updated: [MINOR] Reuse rand and others,
bug fixes
This is an automated email from the ASF dual-hosted git repository.
arnabp20 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemml.git
The following commit(s) were added to refs/heads/master by this push:
new 2671a55 [MINOR] Reuse rand and others, bug fixes
2671a55 is described below
commit 2671a55fedb826a8e560401e467d372b6dc70b34
Author: arnabp <ar...@tugraz.at>
AuthorDate: Sun Jun 21 18:23:55 2020 +0200
[MINOR] Reuse rand and others, bug fixes
This patch enables reuse for rand(matrix) and few more
instructions. Furthermore, it fixes a bug in eviction
logic that was forming cycles in the linked lists.
---
.../apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java | 4 ++++
src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java | 7 +++++--
.../java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java | 6 ++++--
src/test/scripts/functions/lineage/LineageReuseAlg3.dml | 6 +++---
src/test/scripts/functions/lineage/RewriteTest2.dml | 6 +++---
5 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java b/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java
index 464884c..6f92b8f 100644
--- a/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java
+++ b/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java
@@ -172,6 +172,10 @@ public class DataGenCPInstruction extends UnaryCPInstruction {
public boolean isOnesCol() {
return minValue == maxValue && minValue == 1 && sparsity == 1 && getCols() == 1;
}
+
+ public boolean isMatrixCall() {
+ return minValue == maxValue && sparsity == 1;
+ }
public long getFrom() {
return seq_from.isLiteral() ? UtilFunctions.parseToLong(seq_from.getName()) : -1;
diff --git a/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java b/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
index 1e875a4..5e56d84 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
@@ -375,6 +375,7 @@ public class LineageCache
if (LineageCache.probe(probeItem)) {
LineageCacheEntry oe = getIntern(probeItem);
LineageCacheEntry e = _cache.get(item);
+ boolean exists = !e.isNullVal();
if (oe.isMatrixValue())
e.setValue(oe.getMBValue(), computetime);
else
@@ -386,8 +387,10 @@ public class LineageCache
// Add the SB/func entry to the list of items pointing to the same data.
// No cache size update is necessary.
// Maintain _origItem as head.
- e._nextEntry = oe._nextEntry;
- oe._nextEntry = e;
+ if (!exists) {
+ e._nextEntry = oe._nextEntry;
+ oe._nextEntry = e;
+ }
//maintain order for eviction
LineageCacheEviction.addEntry(e);
diff --git a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java
index 48fd186..b610a96 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheConfig.java
@@ -24,6 +24,7 @@ import org.apache.sysds.api.DMLScript;
import org.apache.sysds.runtime.controlprogram.context.ExecutionContext;
import org.apache.sysds.runtime.instructions.Instruction;
import org.apache.sysds.runtime.instructions.cp.ComputationCPInstruction;
+import org.apache.sysds.runtime.instructions.cp.DataGenCPInstruction;
import org.apache.sysds.runtime.instructions.cp.ListIndexingCPInstruction;
import org.apache.sysds.runtime.instructions.cp.MatrixIndexingCPInstruction;
@@ -38,7 +39,7 @@ public class LineageCacheConfig
"rightIndex", "leftIndex", "groupedagg", "r'", "solve", "spoof",
"uamean", "max", "min", "ifelse", "-", "sqrt", ">", "uak+", "<=",
"^", "uamax", "uark+", "uacmean", "eigen", "ctableexpand", "replace",
- "^2", "uack+", "tak+*"
+ "^2", "uack+", "tak+*", "uacsqk+", "uark+"
//TODO: Reuse everything.
};
private static String[] REUSE_OPCODES = new String[] {};
@@ -152,7 +153,8 @@ public class LineageCacheConfig
boolean insttype = inst instanceof ComputationCPInstruction
&& !(inst instanceof ListIndexingCPInstruction);
boolean rightop = (ArrayUtils.contains(REUSE_OPCODES, inst.getOpcode())
- || (inst.getOpcode().equals("append") && isVectorAppend(inst, ec)));
+ || (inst.getOpcode().equals("append") && isVectorAppend(inst, ec))
+ || (inst instanceof DataGenCPInstruction) && ((DataGenCPInstruction) inst).isMatrixCall());
boolean updateInplace = (inst instanceof MatrixIndexingCPInstruction)
&& ec.getMatrixObject(((ComputationCPInstruction)inst).input1).getUpdateType().isInPlace();
return insttype && rightop && !updateInplace;
diff --git a/src/test/scripts/functions/lineage/LineageReuseAlg3.dml b/src/test/scripts/functions/lineage/LineageReuseAlg3.dml
index 6b095cb..17e6b6d 100644
--- a/src/test/scripts/functions/lineage/LineageReuseAlg3.dml
+++ b/src/test/scripts/functions/lineage/LineageReuseAlg3.dml
@@ -23,7 +23,7 @@ findBetas = function(Matrix[double] X, Matrix[double] y)
return (Matrix[double] all_betas)
{
R = matrix(0, rows=10*(ncol(X)+1), cols=5);
- for (lamda in 20:25) {
+ for (lamda in 20:39) {
#betas = multiLogReg(X=X, Y=y, maxii=0, verbose=FALSE);
betas = multiLogReg(X=X, Y=y, icpt=2, tol=0.000001,
reg=lamda, maxi=100, maxii=0, verbose=FALSE);
@@ -36,7 +36,7 @@ findIcpt = function(Matrix[double] X, Matrix[double] y)
return (Matrix[double] all_betas)
{
R = matrix(0, rows=12*(ncol(X)+2), cols=5);
- for (lamda in 20:22) {
+ for (lamda in 20:29) {
for (icpt in 1:2) {
#Function level reuse of 3 out of 6 calls.
betas = multiLogReg(X=X, Y=y, icpt=icpt, tol=0.000001,
@@ -49,7 +49,7 @@ findIcpt = function(Matrix[double] X, Matrix[double] y)
}
-X = rand(rows=1000, cols=1000, sparsity=1.0, seed=42);
+X = rand(rows=1000, cols=100, sparsity=1.0, seed=42);
y = rand(rows=1000, cols=1, min=0, max=6, sparsity=1.0, seed=42);
y = floor(y);
diff --git a/src/test/scripts/functions/lineage/RewriteTest2.dml b/src/test/scripts/functions/lineage/RewriteTest2.dml
index 2ec31d9..f9c7e76 100644
--- a/src/test/scripts/functions/lineage/RewriteTest2.dml
+++ b/src/test/scripts/functions/lineage/RewriteTest2.dml
@@ -22,12 +22,12 @@
X = read($1);
sum = 0;
-tmp = X[,1];
+tmp = matrix(0, rows=nrow(X), cols=0);
R = matrix(0, 1, ncol(X));
-for (i in 2:ncol(X)) {
- Res1 = t(tmp) %*% tmp;
+for (i in 1:ncol(X)) {
tmp = cbind(tmp, X[,i]);
+ Res1 = t(tmp) %*% tmp;
while(FALSE) {}
R[1,i] = sum(Res1);
sum = sum + sum(Res1);