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 <[email protected]>
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);

Reply via email to