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