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