Skip to content

Commit 869ef98

Browse files
committed
added config option for aggressive compression
extended the compression workload analyzer to pick up aggregation operations if the input is compressed as a single column group extended the compression workload analyzer to pick up binary matrix-vec op, if of both inputs are single column group compressed and and row encodings are the same updated cost estimation for compression on already compressed inputs with single column group removed scalars from possible compressible intermediate candidates added support for double compressed binary matrix-matrix op single-threaded compressed binary matrix-vector operation with single column group encoding multithreaded compressed binary matrix-vector operation with single column group encoding
1 parent 78b23cf commit 869ef98

File tree

5 files changed

+327
-19
lines changed

5 files changed

+327
-19
lines changed

src/main/java/org/apache/sysds/conf/DMLConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class DMLConfig
7979
public static final String PARALLEL_TOKENIZE = "sysds.parallel.tokenize";
8080
public static final String PARALLEL_TOKENIZE_NUM_BLOCKS = "sysds.parallel.tokenize.numBlocks";
8181
public static final String COMPRESSED_LINALG = "sysds.compressed.linalg";
82+
public static final String COMPRESSED_LINALG_INTERMEDIATE = "sysds.compressed.linalg.intermediate";
8283
public static final String COMPRESSED_LOSSY = "sysds.compressed.lossy";
8384
public static final String COMPRESSED_VALID_COMPRESSIONS = "sysds.compressed.valid.compressions";
8485
public static final String COMPRESSED_OVERLAPPING = "sysds.compressed.overlapping";

src/main/java/org/apache/sysds/hops/rewrite/RewriteCompressedReblock.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,12 @@ public static boolean satisfiesAggressiveCompressionCondition(Hop hop) {
171171
satisfies |= HopRewriteUtils.isTernary(hop, OpOp3.CTABLE)
172172
&& hop.getInput(0).getDataType().isMatrix()
173173
&& hop.getInput(1).getDataType().isMatrix();
174-
satisfies |= HopRewriteUtils.isData(hop, OpOpData.PERSISTENTREAD) && !hop.isScalar();
174+
satisfies |= HopRewriteUtils.isData(hop, OpOpData.PERSISTENTREAD);
175175
satisfies |= HopRewriteUtils.isUnary(hop, OpOp1.ROUND, OpOp1.FLOOR, OpOp1.NOT, OpOp1.CEIL);
176176
satisfies |= HopRewriteUtils.isBinary(hop, OpOp2.EQUAL, OpOp2.NOTEQUAL, OpOp2.LESS,
177177
OpOp2.LESSEQUAL, OpOp2.GREATER, OpOp2.GREATEREQUAL, OpOp2.AND, OpOp2.OR, OpOp2.MODULUS);
178178
satisfies |= HopRewriteUtils.isTernary(hop, OpOp3.CTABLE);
179+
satisfies &= !hop.isScalar();
179180
}
180181
if(LOG.isDebugEnabled() && satisfies)
181182
LOG.debug("Operation Satisfies: " + hop);

src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,8 @@ private void classifyPhase() {
344344
// final int nRows = mb.getNumRows();
345345
final int nCols = mb.getNumColumns();
346346
// Assume the scaling of cocoding is at maximum square root good relative to number of columns.
347-
final double scale = Math.sqrt(nCols);
347+
final double scale = mb instanceof CompressedMatrixBlock &&
348+
((CompressedMatrixBlock) mb).getColGroups().size() == 1 ? 1 : Math.sqrt(nCols);
348349
final double threshold = _stats.estimatedCostCols / scale;
349350

350351
if(threshold < _stats.originalCost *
@@ -381,7 +382,7 @@ private void coCodePhase() {
381382

382383
logPhase();
383384
// if cocode is estimated larger than uncompressed abort compression.
384-
if(_stats.estimatedCostCoCoded > _stats.originalCost) {
385+
if(_stats.estimatedCostCoCoded > _stats.originalCost*2) {
385386
// abort compression
386387
compressionGroups = null;
387388
if(LOG.isInfoEnabled()) {
@@ -458,7 +459,7 @@ private void finalizePhase() {
458459
_stats.compressedCost = costEstimator.getCost(res.getColGroups(), res.getNumRows());
459460
_stats.setColGroupsCounts(res.getColGroups());
460461

461-
if(_stats.compressedCost > _stats.originalCost) {
462+
if(_stats.compressedCost > _stats.originalCost*2) {
462463
LOG.info("--dense size: " + _stats.denseSize);
463464
LOG.info("--original size: " + _stats.originalSize);
464465
LOG.info("--compressed size: " + _stats.compressedSize);

0 commit comments

Comments
 (0)