You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemds.apache.org by ba...@apache.org on 2021/07/01 13:11:08 UTC
[systemds] 01/02: [SYSTEMDS-3048] CLA SoftReference decompreess
This is an automated email from the ASF dual-hosted git repository.
baunsgaard pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemds.git
commit 66fcd4800576858d4cff98c37ae4d754d0885d68
Author: baunsgaard <ba...@tugraz.at>
AuthorDate: Thu Jul 1 14:57:04 2021 +0200
[SYSTEMDS-3048] CLA SoftReference decompreess
---
.../runtime/compress/CompressedMatrixBlock.java | 29 ++++++++++++++++++++++
.../runtime/compress/lib/CLALibBinaryCellOp.java | 10 --------
2 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
index ff61f9c..3ddc302 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
@@ -24,6 +24,7 @@ import java.io.DataOutput;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -120,6 +121,11 @@ public class CompressedMatrixBlock extends MatrixBlock {
protected boolean overlappingColGroups = false;
/**
+ * Soft reference to a decompressed version of this matrix block.
+ */
+ protected SoftReference<MatrixBlock> decompressedVersion;
+
+ /**
* Constructor for building an empty Compressed Matrix block object.
*
* OBS! Only to be used for serialization.
@@ -195,6 +201,16 @@ public class CompressedMatrixBlock extends MatrixBlock {
Timing time = new Timing(true);
+ if(decompressedVersion != null && decompressedVersion.get() != null){
+ if(DMLScript.STATISTICS || LOG.isDebugEnabled()) {
+ double t = time.stop();
+ LOG.debug("decompressed block was in soft reference.");
+ DMLCompressionStatistics.addDecompressTime(t, 1);
+ }
+ return decompressedVersion.get();
+ }
+
+
long nnz = getNonZeros() == -1 ? recomputeNonZeros() : nonZeros;
if(isEmpty())
return new MatrixBlock(rlen, clen, true, 0);
@@ -215,6 +231,8 @@ public class CompressedMatrixBlock extends MatrixBlock {
LOG.debug("decompressed block w/ k=" + 1 + " in " + t + "ms.");
DMLCompressionStatistics.addDecompressTime(t, 1);
}
+
+ decompressedVersion = new SoftReference<>(ret);
return ret;
}
@@ -245,6 +263,16 @@ public class CompressedMatrixBlock extends MatrixBlock {
return decompress();
Timing time = new Timing(true);
+
+ if(decompressedVersion != null && decompressedVersion.get() != null){
+ if(DMLScript.STATISTICS || LOG.isDebugEnabled()) {
+ double t = time.stop();
+ LOG.debug("decompressed block was in soft reference.");
+ DMLCompressionStatistics.addDecompressTime(t, k);
+ }
+ return decompressedVersion.get();
+ }
+
MatrixBlock ret = getUncompressedColGroupAndRemoveFromListOfColGroups();
if(ret != null && getColGroups().size() == 0)
return ret;
@@ -260,6 +288,7 @@ public class CompressedMatrixBlock extends MatrixBlock {
DMLCompressionStatistics.addDecompressTime(t, k);
}
+ decompressedVersion = new SoftReference<>(ret);
return ret;
}
diff --git a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibBinaryCellOp.java b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibBinaryCellOp.java
index 2777e72..e39932c 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibBinaryCellOp.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibBinaryCellOp.java
@@ -92,17 +92,7 @@ public class CLALibBinaryCellOp {
MatrixBlock d_compressed = m1.decompress(op.getNumThreads());
LibMatrixBincell.bincellOpInPlace(d_compressed, that, op);
return d_compressed;
- // if(left) {
- // return that.binaryOperations(op, d_compressed, result);
- // }
- // else {
- // return d_compressed.binaryOperations(op, that, result);
- // }
}
- // else if(that.isInSparseFormat())
- // return binaryMMSparse(m1, that, op, left);
- // else
- // return binaryMMDense(m1, that, op, left);
}
else if(isSupportedBinaryCellOp(op.fn))
return bincellOp(m1, that, setupCompressedReturnMatrixBlock(m1, result), op, left);