This is an automated email from the ASF dual-hosted git repository.
baunsgaard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/main by this push:
new 34ca59f9be [SYSTEMDS-3572] CLA Morphing Interfaces
34ca59f9be is described below
commit 34ca59f9be0d4d0a5bd833776b686bec7d91091e
Author: baunsgaard <[email protected]>
AuthorDate: Sun May 21 18:19:50 2023 +0200
[SYSTEMDS-3572] CLA Morphing Interfaces
This commit adds multiple Interfaces for the different intended behavior
of the Column Groups to enable
- Morphing
- Re-compressing
- getting compression statistics from a column groups
- Combining column groups
Also contained is a change of the CLALib classes to be final and
their constructors private.
Closes #1830
---
.../runtime/compress/CompressedMatrixBlock.java | 84 +++++----------------
.../compress/CompressedMatrixBlockFactory.java | 22 ++++--
.../sysds/runtime/compress/colgroup/AColGroup.java | 31 +++++++-
.../runtime/compress/colgroup/ColGroupConst.java | 11 +++
.../runtime/compress/colgroup/ColGroupDDC.java | 35 +++++----
.../runtime/compress/colgroup/ColGroupDDCFOR.java | 16 +++-
.../runtime/compress/colgroup/ColGroupEmpty.java | 11 +++
.../colgroup/ColGroupLinearFunctional.java | 11 +++
.../runtime/compress/colgroup/ColGroupOLE.java | 14 +++-
.../runtime/compress/colgroup/ColGroupRLE.java | 11 +++
.../runtime/compress/colgroup/ColGroupSDC.java | 12 +++
.../runtime/compress/colgroup/ColGroupSDCFOR.java | 12 +++
.../compress/colgroup/ColGroupSDCSingle.java | 15 +++-
.../compress/colgroup/ColGroupSDCSingleZeros.java | 13 +++-
.../compress/colgroup/ColGroupSDCZeros.java | 11 +++
.../compress/colgroup/ColGroupUncompressed.java | 11 +++
.../runtime/compress/io/ReaderCompressed.java | 4 +-
.../sysds/runtime/compress/lib/CLALibAppend.java | 6 +-
.../runtime/compress/lib/CLALibBinaryCellOp.java | 7 +-
.../sysds/runtime/compress/lib/CLALibCMOps.java | 7 +-
...{CLALibSquash.java => CLALibCombineGroups.java} | 10 ++-
.../sysds/runtime/compress/lib/CLALibCompAgg.java | 6 +-
.../runtime/compress/lib/CLALibDecompress.java | 20 +++--
.../runtime/compress/lib/CLALibLeftMultBy.java | 6 +-
.../sysds/runtime/compress/lib/CLALibMMChain.java | 7 +-
.../runtime/compress/lib/CLALibMatrixMult.java | 6 +-
.../sysds/runtime/compress/lib/CLALibRexpand.java | 9 ++-
.../runtime/compress/lib/CLALibRightMultBy.java | 6 +-
.../sysds/runtime/compress/lib/CLALibScalar.java | 7 +-
.../sysds/runtime/compress/lib/CLALibSlice.java | 7 +-
.../sysds/runtime/compress/lib/CLALibSquash.java | 32 +++++++-
.../lib/{CLALibCombine.java => CLALibStack.java} | 7 +-
.../sysds/runtime/compress/lib/CLALibTSMM.java | 6 +-
.../runtime/compress/lib/CLALibTernaryOp.java | 88 ++++++++++++++++++++++
.../sysds/runtime/compress/lib/CLALibUnary.java | 26 +++++--
.../sysds/runtime/compress/lib/CLALibUtils.java | 4 +
.../sysds/runtime/matrix/data/MatrixBlock.java | 2 +-
.../compress/colgroup/ColGroupNegativeTests.java | 24 ++++++
.../component/compress/combine/CombineTest.java | 6 +-
39 files changed, 481 insertions(+), 142 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 d1d4af99b0..3c4751e8c1 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
@@ -56,6 +56,7 @@ import org.apache.sysds.runtime.compress.lib.CLALibScalar;
import org.apache.sysds.runtime.compress.lib.CLALibSlice;
import org.apache.sysds.runtime.compress.lib.CLALibSquash;
import org.apache.sysds.runtime.compress.lib.CLALibTSMM;
+import org.apache.sysds.runtime.compress.lib.CLALibTernaryOp;
import org.apache.sysds.runtime.compress.lib.CLALibUnary;
import org.apache.sysds.runtime.compress.lib.CLALibUtils;
import org.apache.sysds.runtime.controlprogram.caching.MatrixObject.UpdateType;
@@ -63,9 +64,6 @@ import
org.apache.sysds.runtime.controlprogram.parfor.stat.InfrastructureAnalyze
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.data.SparseRow;
-import org.apache.sysds.runtime.functionobjects.MinusMultiply;
-import org.apache.sysds.runtime.functionobjects.PlusMultiply;
-import
org.apache.sysds.runtime.functionobjects.TernaryValueFunction.ValueFunctionWithConstant;
import org.apache.sysds.runtime.instructions.InstructionUtils;
import org.apache.sysds.runtime.instructions.cp.CM_COV_Object;
import org.apache.sysds.runtime.instructions.cp.ScalarObject;
@@ -73,7 +71,6 @@ import
org.apache.sysds.runtime.instructions.spark.data.IndexedMatrixValue;
import org.apache.sysds.runtime.matrix.data.CTableMap;
import org.apache.sysds.runtime.matrix.data.IJV;
import org.apache.sysds.runtime.matrix.data.LibMatrixDatagen;
-import org.apache.sysds.runtime.matrix.data.LibMatrixTercell;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.data.MatrixIndexes;
import org.apache.sysds.runtime.matrix.data.MatrixValue;
@@ -575,21 +572,6 @@ public class CompressedMatrixBlock extends MatrixBlock {
return tmp.reorgOperations(op, ret, startRow, startColumn,
length);
}
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("CompressedMatrixBlock:");
- sb.append("\nCols:" + getNumColumns() + " Rows:" + getNumRows()
+ " Overlapping: " + isOverlapping() + " nnz: "
- + nonZeros);
- if(_colGroups != null)
- for(AColGroup cg : _colGroups) {
- sb.append("\n" + cg);
- }
- else
- sb.append("\nEmptyColGroups");
- return sb.toString();
- }
-
public boolean isOverlapping() {
return _colGroups.size() != 1 && overlappingColGroups;
}
@@ -881,54 +863,7 @@ public class CompressedMatrixBlock extends MatrixBlock {
@Override
public MatrixBlock ternaryOperations(TernaryOperator op, MatrixBlock
m2, MatrixBlock m3, MatrixBlock ret) {
-
- // prepare inputs
- final int r1 = getNumRows();
- final int r2 = m2.getNumRows();
- final int r3 = m3.getNumRows();
- final int c1 = getNumColumns();
- final int c2 = m2.getNumColumns();
- final int c3 = m3.getNumColumns();
- final boolean s1 = (r1 == 1 && c1 == 1);
- final boolean s2 = (r2 == 1 && c2 == 1);
- final boolean s3 = (r3 == 1 && c3 == 1);
- final double d1 = s1 ? quickGetValue(0, 0) : Double.NaN;
- final double d2 = s2 ? m2.quickGetValue(0, 0) : Double.NaN;
- final double d3 = s3 ? m3.quickGetValue(0, 0) : Double.NaN;
- final int m = Math.max(Math.max(r1, r2), r3);
- final int n = Math.max(Math.max(c1, c2), c3);
-
- ternaryOperationCheck(s1, s2, s3, m, r1, r2, r3, n, c1, c2, c3);
-
- final boolean PM_Or_MM = (op.fn instanceof PlusMultiply ||
op.fn instanceof MinusMultiply);
- if(PM_Or_MM && ((s2 && d2 == 0) || (s3 && d3 == 0))) {
- ret = new CompressedMatrixBlock();
- ret.copy(this);
- return ret;
- }
-
- if(m2 instanceof CompressedMatrixBlock)
- m2 = ((CompressedMatrixBlock)
m2).getUncompressed("Ternary Operator arg2 " + op.fn.getClass().getSimpleName(),
- op.getNumThreads());
- if(m3 instanceof CompressedMatrixBlock)
- m3 = ((CompressedMatrixBlock)
m3).getUncompressed("Ternary Operator arg3 " + op.fn.getClass().getSimpleName(),
- op.getNumThreads());
-
- if(s2 != s3 && (op.fn instanceof PlusMultiply || op.fn
instanceof MinusMultiply)) {
- // SPECIAL CASE for sparse-dense combinations of common
+* and -*
- BinaryOperator bop = ((ValueFunctionWithConstant)
op.fn).setOp2Constant(s2 ? d2 : d3);
- bop.setNumThreads(op.getNumThreads());
- ret = CLALibBinaryCellOp.binaryOperationsRight(bop,
this, s2 ? m3 : m2, ret);
- }
- else {
- final boolean sparseOutput =
evalSparseFormatInMemory(m, n, (s1 ? m * n * (d1 != 0 ? 1 : 0) : getNonZeros())
+
- Math.min(s2 ? m * n : m2.getNonZeros(), s3 ? m
* n : m3.getNonZeros()));
- ret.reset(m, n, sparseOutput);
- final MatrixBlock thisUncompressed =
getUncompressed("Ternary Operation not supported");
- LibMatrixTercell.tercellOp(thisUncompressed, m2, m3,
ret, op);
- ret.examSparsity();
- }
- return ret;
+ return CLALibTernaryOp.ternaryOperations(this, op, m2, m3, ret);
}
@Override
@@ -1293,4 +1228,19 @@ public class CompressedMatrixBlock extends MatrixBlock {
public void allocateAndResetSparseBlock(boolean clearNNZ,
SparseBlock.Type stype) {
throw new DMLCompressionException("Invalid to allocate block on
a compressed MatrixBlock");
}
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("CompressedMatrixBlock:");
+ sb.append("\nCols:" + getNumColumns() + " Rows:" + getNumRows()
+ " Overlapping: " + isOverlapping() + " nnz: "
+ + nonZeros);
+ if(_colGroups != null)
+ for(AColGroup cg : _colGroups) {
+ sb.append("\n" + cg);
+ }
+ else
+ sb.append("\nEmptyColGroups");
+ return sb.toString();
+ }
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java
b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java
index 63b8320480..423ec0c3f3 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlockFactory.java
@@ -267,7 +267,7 @@ public class CompressedMatrixBlockFactory {
private Pair<MatrixBlock, CompressionStatistics> compressMatrix() {
if(mb instanceof CompressedMatrixBlock) // Redundant compression
- return returnSelf();
+ return recompress((CompressedMatrixBlock) mb);
_stats.denseSize =
MatrixBlock.estimateSizeInMemory(mb.getNumRows(), mb.getNumColumns(), 1.0);
_stats.originalSize = mb.getInMemorySize();
@@ -305,8 +305,8 @@ public class CompressedMatrixBlockFactory {
if(LOG.isTraceEnabled()) {
LOG.trace("Logging all individual columns estimated
cost:");
for(CompressedSizeInfoColGroup g :
compressionGroups.getInfo())
- LOG.trace(String.format("Cost: %8.0f Size: %16d
%15s", costEstimator.getCost(g), g.getMinSize(),
- g.getColumns()));
+ LOG.trace(
+ String.format("Cost: %8.0f Size: %16d
%15s", costEstimator.getCost(g), g.getMinSize(), g.getColumns()));
}
_stats.estimatedSizeCols = compressionGroups.memoryEstimate();
@@ -452,6 +452,17 @@ public class CompressedMatrixBlockFactory {
return new ImmutablePair<>(mb, _stats);
}
+ private Pair<MatrixBlock, CompressionStatistics>
recompress(CompressedMatrixBlock cmb) {
+ LOG.debug("Recompressing an already compressed MatrixBlock");
+ LOG.error("Not Implemented Recompress yet");
+ return new ImmutablePair<>(cmb, null);
+ // _stats.originalSize = cmb.getInMemorySize();
+ // CompressedMatrixBlock combined =
CLALibCombineGroups.combine(cmb, k);
+ // CompressedMatrixBlock squashed =
CLALibSquash.squash(combined, k);
+ // _stats.compressedSize = squashed.getInMemorySize();
+ // return new ImmutablePair<>(squashed, _stats);
+ }
+
private void logPhase() {
setNextTimePhase(time.stop());
DMLCompressionStatistics.addCompressionTime(getLastTimePhase(),
phase);
@@ -559,11 +570,6 @@ public class CompressedMatrixBlockFactory {
return new ImmutablePair<>(res, _stats);
}
- private Pair<MatrixBlock, CompressionStatistics> returnSelf() {
- LOG.info("MatrixBlock already compressed or is Empty");
- return new ImmutablePair<>(mb, null);
- }
-
private static String constructNrColumnString(List<AColGroup> cg) {
StringBuilder sb = new StringBuilder();
sb.append("[");
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java
index e6cd408309..c8e25f9920 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/AColGroup.java
@@ -24,12 +24,14 @@ import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sysds.runtime.compress.colgroup.indexes.IColIndex;
import
org.apache.sysds.runtime.compress.colgroup.indexes.IColIndex.SliceResult;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.instructions.cp.CM_COV_Object;
@@ -610,12 +612,37 @@ public abstract class AColGroup implements Serializable {
public abstract ICLAScheme getCompressionScheme();
/**
- * Clear variables that can be recomputed from the allocation of this
columngroup.
+ * Clear variables that can be recomputed from the allocation of this
column group.
*/
- public void clear(){
+ public void clear() {
// do nothing
}
+ /**
+ * Recompress this column group into a new column group.
+ *
+ * @return A new or the same column group depending on optimization
goal.
+ */
+ public abstract AColGroup recompress();
+
+ /**
+ * Recompress this column group into a new column group of the given
type.
+ *
+ * @param ct The compressionType that the column group should morph into
+ * @return A new column group
+ */
+ public AColGroup morph(CompressionType ct){
+ throw new NotImplementedException();
+ }
+
+ /**
+ * Get the compression info for this column group.
+ *
+ * @param nRow The number of rows in this column group.
+ * @return The compression info for this group.
+ */
+ public abstract CompressedSizeInfoColGroup getCompressionInfo(int nRow);
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java
index 2f94c3186a..c053fa9d6d 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupConst.java
@@ -33,6 +33,7 @@ import
org.apache.sysds.runtime.compress.colgroup.indexes.IColIndex;
import org.apache.sysds.runtime.compress.colgroup.scheme.ConstScheme;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.compress.lib.CLALibLeftMultBy;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
@@ -566,6 +567,16 @@ public class ColGroupConst extends ADictBasedColGroup {
return ConstScheme.create(this);
}
+ @Override
+ public AColGroup recompress(){
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow){
+ return new CompressedSizeInfoColGroup(_colIndexes, 1, nRow,
CompressionType.CONST);
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
index 2d03f406db..06b10c1126 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
@@ -37,6 +37,7 @@ import
org.apache.sysds.runtime.compress.colgroup.offset.AOffsetIterator;
import org.apache.sysds.runtime.compress.colgroup.scheme.DDCScheme;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.functionobjects.Builtin;
@@ -55,7 +56,7 @@ public class ColGroupDDC extends APreAgg implements
AMapToDataGroup {
protected final AMapToData _data;
- private ColGroupDDC(IColIndex colIndexes, ADictionary dict, AMapToData
data, int[] cachedCounts) {
+ private ColGroupDDC(IColIndex colIndexes, ADictionary dict, AMapToData
data, int[] cachedCounts) {
super(colIndexes, dict, cachedCounts);
_data = data;
}
@@ -117,8 +118,8 @@ public class ColGroupDDC extends APreAgg implements
AMapToDataGroup {
decompressToDenseBlockDenseDictGeneric(db, rl, ru,
offR, offC, values);
}
- private final void
decompressToDenseBlockDenseDictSingleColContiguous(DenseBlock db, int rl, int
ru, int offR, int offC,
- double[] values) {
+ private final void
decompressToDenseBlockDenseDictSingleColContiguous(DenseBlock db, int rl, int
ru, int offR,
+ int offC, double[] values) {
final double[] c = db.values(0);
final int nCols = db.getDim(1);
final int colOff = _colIndexes.get(0) + offC;
@@ -128,12 +129,12 @@ public class ColGroupDDC extends APreAgg implements
AMapToDataGroup {
}
@Override
- public AMapToData getMapToData(){
+ public AMapToData getMapToData() {
return _data;
}
- private final void
decompressToDenseBlockDenseDictSingleColOutContiguous(DenseBlock db, int rl,
int ru, int offR, int offC,
- double[] values) {
+ private final void
decompressToDenseBlockDenseDictSingleColOutContiguous(DenseBlock db, int rl,
int ru, int offR,
+ int offC, double[] values) {
final double[] c = db.values(0);
for(int i = rl, offT = rl + offR + _colIndexes.get(0) + offC; i
< ru; i++, offT++)
c[offT] += values[_data.getIndex(i)];
@@ -152,7 +153,8 @@ public class ColGroupDDC extends APreAgg implements
AMapToDataGroup {
}
}
- private final void
decompressToDenseBlockDenseDictNoColOffset(DenseBlock db, int rl, int ru, int
offR, double[] values) {
+ private final void
decompressToDenseBlockDenseDictNoColOffset(DenseBlock db, int rl, int ru, int
offR,
+ double[] values) {
final int nCol = _colIndexes.size();
final int colOut = db.getDim(1);
int off = (rl + offR) * colOut;
@@ -508,8 +510,7 @@ public class ColGroupDDC extends APreAgg implements
AMapToDataGroup {
LOG.warn("Not same Dictionaries
therefore not appending DDC\n" + _dict + "\n\n" + gDDC._dict);
}
else
- LOG.warn("Not same columns therefore not
appending DDC\n" + _colIndexes + "\n\n"
- + g.getColIndices());
+ LOG.warn("Not same columns therefore not
appending DDC\n" + _colIndexes + "\n\n" + g.getColIndices());
}
else
LOG.warn("Not DDC but " + g.getClass().getSimpleName()
+ ", therefore not appending DDC");
@@ -519,9 +520,8 @@ public class ColGroupDDC extends APreAgg implements
AMapToDataGroup {
@Override
public AColGroup appendNInternal(AColGroup[] g) {
for(int i = 1; i < g.length; i++) {
- if(!_colIndexes.equals( g[i]._colIndexes)) {
- LOG.warn("Not same columns therefore not
appending DDC\n" + _colIndexes + "\n\n"
- + g[i]._colIndexes);
+ if(!_colIndexes.equals(g[i]._colIndexes)) {
+ LOG.warn("Not same columns therefore not
appending DDC\n" + _colIndexes + "\n\n" + g[i]._colIndexes);
return null;
}
@@ -540,12 +540,21 @@ public class ColGroupDDC extends APreAgg implements
AMapToDataGroup {
return create(_colIndexes, _dict, nd, null);
}
-
@Override
public ICLAScheme getCompressionScheme() {
return DDCScheme.create(this);
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java
index b59c72be98..d05b663f85 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDCFOR.java
@@ -35,6 +35,7 @@ import
org.apache.sysds.runtime.compress.colgroup.mapping.AMapToData;
import org.apache.sysds.runtime.compress.colgroup.mapping.MapToFactory;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.functionobjects.Builtin;
import org.apache.sysds.runtime.functionobjects.Divide;
import org.apache.sysds.runtime.functionobjects.Minus;
@@ -59,7 +60,8 @@ public class ColGroupDDCFOR extends AMorphingMMColGroup {
/** Reference values in this column group */
protected final double[] _reference;
- private ColGroupDDCFOR(IColIndex colIndexes, ADictionary dict, double[]
reference, AMapToData data, int[] cachedCounts) {
+ private ColGroupDDCFOR(IColIndex colIndexes, ADictionary dict, double[]
reference, AMapToData data,
+ int[] cachedCounts) {
super(colIndexes, dict, cachedCounts);
_data = data;
_reference = reference;
@@ -439,7 +441,7 @@ public class ColGroupDDCFOR extends AMorphingMMColGroup {
public AColGroup append(AColGroup g) {
if(g instanceof ColGroupDDCFOR &&
g.getColIndices().equals(_colIndexes)) {
ColGroupDDCFOR gDDC = (ColGroupDDCFOR) g;
- if(Arrays.equals(_reference , gDDC._reference) &&
gDDC._dict.equals(_dict)){
+ if(Arrays.equals(_reference, gDDC._reference) &&
gDDC._dict.equals(_dict)) {
AMapToData nd = _data.append(gDDC._data);
return create(_colIndexes, _dict, nd, null,
_reference);
}
@@ -457,6 +459,16 @@ public class ColGroupDDCFOR extends AMorphingMMColGroup {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java
index c838850743..cd788a1318 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupEmpty.java
@@ -31,6 +31,7 @@ import
org.apache.sysds.runtime.compress.colgroup.indexes.IIterate;
import org.apache.sysds.runtime.compress.colgroup.scheme.EmptyScheme;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.functionobjects.Builtin;
@@ -338,4 +339,14 @@ public class ColGroupEmpty extends AColGroupCompressed {
public ICLAScheme getCompressionScheme() {
return EmptyScheme.create(this);
}
+
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ return new CompressedSizeInfoColGroup(_colIndexes, 0, nRow,
CompressionType.CONST);
+ }
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
index 8c899ec609..452d5e1f07 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupLinearFunctional.java
@@ -30,6 +30,7 @@ import
org.apache.sysds.runtime.compress.colgroup.indexes.ColIndexFactory;
import org.apache.sysds.runtime.compress.colgroup.indexes.IColIndex;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import
org.apache.sysds.runtime.controlprogram.parfor.stat.InfrastructureAnalyzer;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
@@ -682,4 +683,14 @@ public class ColGroupLinearFunctional extends
AColGroupCompressed {
return null;
}
+ @Override
+ public AColGroup recompress(){
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow){
+ throw new NotImplementedException("Not Implemented Compressed
SizeInfo for Linear col group");
+ }
+
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
index 9c7ca53ed5..961782522c 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
@@ -33,6 +33,7 @@ import
org.apache.sysds.runtime.compress.colgroup.indexes.ColIndexFactory;
import org.apache.sysds.runtime.compress.colgroup.indexes.IColIndex;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.functionobjects.Builtin;
@@ -48,8 +49,8 @@ import
org.apache.sysds.runtime.matrix.operators.UnaryOperator;
public class ColGroupOLE extends AColGroupOffset {
private static final long serialVersionUID = 5723227906925121066L;
- private ColGroupOLE(IColIndex colIndices, int numRows, boolean zero,
ADictionary dict, char[] bitmaps, int[] bitmapOffs,
- int[] counts) {
+ private ColGroupOLE(IColIndex colIndices, int numRows, boolean zero,
ADictionary dict, char[] bitmaps,
+ int[] bitmapOffs, int[] counts) {
super(colIndices, numRows, zero, dict, bitmapOffs, bitmaps,
counts);
}
@@ -673,4 +674,13 @@ public class ColGroupOLE extends AColGroupOffset {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java
index ba8e5f9203..909808ee89 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupRLE.java
@@ -36,6 +36,7 @@ import
org.apache.sysds.runtime.compress.colgroup.offset.AIterator;
import org.apache.sysds.runtime.compress.colgroup.offset.AOffsetIterator;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.functionobjects.Builtin;
@@ -985,6 +986,16 @@ public class ColGroupRLE extends AColGroupOffset {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java
index 1e45de8924..500986bd23 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDC.java
@@ -24,6 +24,7 @@ import java.io.DataOutput;
import java.io.IOException;
import java.util.Arrays;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.sysds.runtime.DMLRuntimeException;
import org.apache.sysds.runtime.compress.DMLCompressionException;
import org.apache.sysds.runtime.compress.colgroup.dictionary.ADictionary;
@@ -40,6 +41,7 @@ import
org.apache.sysds.runtime.compress.colgroup.offset.AOffset.OffsetSliceInfo
import org.apache.sysds.runtime.compress.colgroup.offset.OffsetFactory;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.functionobjects.Builtin;
import org.apache.sysds.runtime.instructions.cp.CM_COV_Object;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
@@ -626,6 +628,16 @@ public class ColGroupSDC extends ASDC implements
AMapToDataGroup {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java
index 01bf7f4a55..2969d9fc04 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCFOR.java
@@ -24,6 +24,7 @@ import java.io.DataOutput;
import java.io.IOException;
import java.util.Arrays;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.sysds.runtime.compress.DMLCompressionException;
import org.apache.sysds.runtime.compress.colgroup.dictionary.ADictionary;
import org.apache.sysds.runtime.compress.colgroup.dictionary.Dictionary;
@@ -38,6 +39,7 @@ import
org.apache.sysds.runtime.compress.colgroup.offset.AOffset.OffsetSliceInfo
import org.apache.sysds.runtime.compress.colgroup.offset.OffsetFactory;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.functionobjects.Builtin;
import org.apache.sysds.runtime.functionobjects.Divide;
import org.apache.sysds.runtime.functionobjects.Minus;
@@ -488,6 +490,16 @@ public class ColGroupSDCFOR extends ASDC implements
AMapToDataGroup {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
index 94c1f889c0..79e70ad52e 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingle.java
@@ -38,6 +38,7 @@ import
org.apache.sysds.runtime.compress.colgroup.offset.AOffsetIterator;
import org.apache.sysds.runtime.compress.colgroup.offset.OffsetFactory;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.functionobjects.Builtin;
import org.apache.sysds.runtime.instructions.cp.CM_COV_Object;
import org.apache.sysds.runtime.matrix.operators.BinaryOperator;
@@ -59,8 +60,8 @@ public class ColGroupSDCSingle extends ASDC {
/** The default value stored in this column group */
protected final double[] _defaultTuple;
- private ColGroupSDCSingle(IColIndex colIndices, int numRows,
ADictionary dict, double[] defaultTuple, AOffset offsets,
- int[] cachedCounts) {
+ private ColGroupSDCSingle(IColIndex colIndices, int numRows,
ADictionary dict, double[] defaultTuple,
+ AOffset offsets, int[] cachedCounts) {
super(colIndices, numRows, dict == null ?
Dictionary.createNoCheck(new double[colIndices.size()]) : dict, offsets,
cachedCounts);
_defaultTuple = defaultTuple;
@@ -589,6 +590,16 @@ public class ColGroupSDCSingle extends ASDC {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
index 954122620c..565874d83a 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCSingleZeros.java
@@ -39,6 +39,7 @@ import
org.apache.sysds.runtime.compress.colgroup.offset.AOffsetIterator;
import org.apache.sysds.runtime.compress.colgroup.offset.OffsetFactory;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.functionobjects.Builtin;
@@ -97,7 +98,7 @@ public class ColGroupSDCSingleZeros extends ASDCZero {
return;
else if(it.value() >= ru)
return;
- // _indexes.cacheIterator(it, ru);
+ // _indexes.cacheIterator(it, ru);
else {
decompressToDenseBlockDenseDictionaryWithProvidedIterator(db, rl, ru, offR,
offC, values, it);
// _indexes.cacheIterator(it, ru);
@@ -854,6 +855,16 @@ public class ColGroupSDCSingleZeros extends ASDCZero {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
index 2e99179eaf..0931526051 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupSDCZeros.java
@@ -24,6 +24,7 @@ import java.io.DataOutput;
import java.io.IOException;
import java.util.Arrays;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.sysds.runtime.DMLRuntimeException;
import org.apache.sysds.runtime.compress.DMLCompressionException;
import org.apache.sysds.runtime.compress.colgroup.dictionary.ADictionary;
@@ -40,6 +41,7 @@ import
org.apache.sysds.runtime.compress.colgroup.offset.AOffset.OffsetSliceInfo
import org.apache.sysds.runtime.compress.colgroup.offset.OffsetFactory;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.data.SparseBlock;
import org.apache.sysds.runtime.functionobjects.Builtin;
@@ -793,6 +795,15 @@ public class ColGroupSDCZeros extends ASDCZero implements
AMapToDataGroup {
}
@Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(super.toString());
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
index 2c4e9e4822..1ce1e1963b 100644
---
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupUncompressed.java
@@ -34,6 +34,7 @@ import
org.apache.sysds.runtime.compress.colgroup.indexes.ColIndexFactory;
import org.apache.sysds.runtime.compress.colgroup.indexes.IColIndex;
import org.apache.sysds.runtime.compress.colgroup.scheme.ICLAScheme;
import org.apache.sysds.runtime.compress.cost.ComputationCostEstimator;
+import org.apache.sysds.runtime.compress.estim.CompressedSizeInfoColGroup;
import org.apache.sysds.runtime.compress.utils.Util;
import
org.apache.sysds.runtime.controlprogram.parfor.stat.InfrastructureAnalyzer;
import org.apache.sysds.runtime.data.DenseBlock;
@@ -804,6 +805,16 @@ public class ColGroupUncompressed extends AColGroup {
return null;
}
+ @Override
+ public AColGroup recompress() {
+ return this;
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ throw new NotImplementedException();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/io/ReaderCompressed.java
b/src/main/java/org/apache/sysds/runtime/compress/io/ReaderCompressed.java
index 22efcbafd1..f1f45abc98 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/io/ReaderCompressed.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/io/ReaderCompressed.java
@@ -35,7 +35,7 @@ import org.apache.sysds.hops.OptimizerUtils;
import org.apache.sysds.runtime.DMLRuntimeException;
import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
import org.apache.sysds.runtime.compress.CompressedMatrixBlockFactory;
-import org.apache.sysds.runtime.compress.lib.CLALibCombine;
+import org.apache.sysds.runtime.compress.lib.CLALibStack;
import org.apache.sysds.runtime.io.IOUtilFunctions;
import org.apache.sysds.runtime.io.MatrixReader;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
@@ -82,7 +82,7 @@ public final class ReaderCompressed extends MatrixReader {
if(data.size() == 1)
return data.entrySet().iterator().next().getValue();
else
- return CLALibCombine.combine(data,
OptimizerUtils.getParallelTextWriteParallelism());
+ return CLALibStack.combine(data,
OptimizerUtils.getParallelTextWriteParallelism());
}
private static void read(Path path, JobConf job, Map<MatrixIndexes,
MatrixBlock> data) throws IOException {
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibAppend.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibAppend.java
index c6b71e3fdc..4d2ce93919 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibAppend.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibAppend.java
@@ -33,7 +33,11 @@ import
org.apache.sysds.runtime.compress.colgroup.indexes.ColIndexFactory;
import org.apache.sysds.runtime.compress.colgroup.indexes.IColIndex;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
-public class CLALibAppend {
+public final class CLALibAppend {
+
+ private CLALibAppend(){
+ // private constructor.
+ }
private static final Log LOG =
LogFactory.getLog(CLALibAppend.class.getName());
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 f530247032..54bd51e60f 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
@@ -59,10 +59,13 @@ import
org.apache.sysds.runtime.matrix.operators.RightScalarOperator;
import org.apache.sysds.runtime.matrix.operators.ScalarOperator;
import org.apache.sysds.runtime.util.CommonThreadPool;
-public class CLALibBinaryCellOp {
-
+public final class CLALibBinaryCellOp {
private static final Log LOG =
LogFactory.getLog(CLALibBinaryCellOp.class.getName());
+ private CLALibBinaryCellOp() {
+ // empty private constructor.
+ }
+
public static MatrixBlock binaryOperationsRight(BinaryOperator op,
CompressedMatrixBlock m1, MatrixBlock that,
MatrixBlock result) {
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCMOps.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCMOps.java
index ec2cfae024..3e77aaefb9 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCMOps.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCMOps.java
@@ -28,7 +28,12 @@ import org.apache.sysds.runtime.matrix.data.LibMatrixAgg;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.operators.CMOperator;
-public class CLALibCMOps {
+public final class CLALibCMOps {
+
+ private CLALibCMOps() {
+ // private constructor
+ }
+
public static CM_COV_Object centralMoment(CompressedMatrixBlock cmb,
CMOperator op) {
MatrixBlock.checkCMOperations(cmb, op);
if(cmb.isEmpty())
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSquash.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombineGroups.java
similarity index 84%
copy from src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSquash.java
copy to
src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombineGroups.java
index fec3e800e7..cc9d25c9ce 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSquash.java
+++
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombineGroups.java
@@ -22,8 +22,14 @@ package org.apache.sysds.runtime.compress.lib;
import org.apache.commons.lang.NotImplementedException;
import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
-public class CLALibSquash {
- public static CompressedMatrixBlock squash(CompressedMatrixBlock m, int
k) {
+public final class CLALibCombineGroups {
+
+ private CLALibCombineGroups() {
+ // private constructor
+ }
+
+ public static CompressedMatrixBlock combine(CompressedMatrixBlock cmb,
int k) {
throw new NotImplementedException();
}
+
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCompAgg.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCompAgg.java
index 4b90d48ca5..d12abb1167 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCompAgg.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCompAgg.java
@@ -67,10 +67,14 @@ import
org.apache.sysds.runtime.matrix.operators.BinaryOperator;
import org.apache.sysds.runtime.util.CommonThreadPool;
import org.apache.sysds.utils.DMLCompressionStatistics;
-public class CLALibCompAgg {
+public final class CLALibCompAgg {
private static final Log LOG =
LogFactory.getLog(CLALibCompAgg.class.getName());
private static final long MIN_PAR_AGG_THRESHOLD = 8 * 1024;
+ private CLALibCompAgg(){
+ // private constructor
+ }
+
public static MatrixBlock aggregateUnary(CompressedMatrixBlock
inputMatrix, MatrixBlock result,
AggregateUnaryOperator op, int blen, MatrixIndexes indexesIn,
boolean inCP) {
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibDecompress.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibDecompress.java
index f92533466b..eee0eced01 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibDecompress.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibDecompress.java
@@ -44,9 +44,13 @@ import org.apache.sysds.utils.DMLCompressionStatistics;
/**
* Library to decompress a list of column groups into a matrix.
*/
-public class CLALibDecompress {
+public final class CLALibDecompress {
private static final Log LOG =
LogFactory.getLog(CLALibDecompress.class.getName());
+ private CLALibDecompress() {
+ // private constructor
+ }
+
public static MatrixBlock decompress(CompressedMatrixBlock cmb, int k) {
Timing time = new Timing(true);
MatrixBlock ret = decompressExecute(cmb, k);
@@ -59,7 +63,8 @@ public class CLALibDecompress {
return ret;
}
- public static void decompressTo(CompressedMatrixBlock cmb, MatrixBlock
ret, int rowOffset, int colOffset, int k, boolean countNNz) {
+ public static void decompressTo(CompressedMatrixBlock cmb, MatrixBlock
ret, int rowOffset, int colOffset, int k,
+ boolean countNNz) {
Timing time = new Timing(true);
if(cmb.getNumColumns() + colOffset > ret.getNumColumns() ||
cmb.getNumRows() + rowOffset > ret.getNumRows()) {
LOG.warn(
@@ -185,7 +190,7 @@ public class CLALibDecompress {
else if(ret.isInSparseFormat()) {
decompressSparseMultiThread(ret, filteredGroups, nRows,
blklen, k);
}
- else{
+ else {
decompressDenseMultiThread(ret, filteredGroups, nRows,
blklen, constV, eps, k, overlapping);
}
ret.recomputeNonZeros();
@@ -249,7 +254,8 @@ public class CLALibDecompress {
}
}
- protected static void decompressDenseMultiThread(MatrixBlock ret,
List<AColGroup> groups, double[] constV, int k, boolean overlapping) {
+ protected static void decompressDenseMultiThread(MatrixBlock ret,
List<AColGroup> groups, double[] constV, int k,
+ boolean overlapping) {
final int nRows = ret.getNumRows();
final double eps = getEps(constV);
final int blklen = Math.max(nRows / k, 512);
@@ -268,11 +274,11 @@ public class CLALibDecompress {
final ExecutorService pool = CommonThreadPool.get(k);
try {
final ArrayList<Callable<Long>> tasks = new
ArrayList<>();
- if(overlapping || constV != null){
+ if(overlapping || constV != null) {
for(int i = 0; i < rlen; i += blklen)
tasks.add(new
DecompressDenseTask(filteredGroups, ret, eps, i, Math.min(i + blklen, rlen),
constV));
}
- else{
+ else {
for(int i = 0; i < rlen; i += blklen)
for(AColGroup g : filteredGroups)
tasks.add(new
DecompressDenseSingleColTask(g, ret, eps, i, Math.min(i + blklen, rlen), null));
@@ -402,7 +408,7 @@ public class CLALibDecompress {
for(int b = _rl; b < _ru; b += _blklen) {
final int e = Math.min(b + _blklen,
_ru);
// for(AColGroup grp : _colGroups)
-
_grp.decompressToDenseBlock(_ret.getDenseBlock(), b, e);
+
_grp.decompressToDenseBlock(_ret.getDenseBlock(), b, e);
if(_constV != null)
addVector(_ret, _constV, _eps,
b, e);
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibLeftMultBy.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibLeftMultBy.java
index b50c9b5c0f..731d8f5ecf 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibLeftMultBy.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibLeftMultBy.java
@@ -42,9 +42,13 @@ import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.operators.BinaryOperator;
import org.apache.sysds.runtime.util.CommonThreadPool;
-public class CLALibLeftMultBy {
+public final class CLALibLeftMultBy {
private static final Log LOG =
LogFactory.getLog(CLALibLeftMultBy.class.getName());
+ private CLALibLeftMultBy(){
+ // private constructor
+ }
+
/**
* Left multiplication with a CompressedMatrixBlock on the right
following the equation:
*
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMMChain.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMMChain.java
index dced83556a..bc164a5e91 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMMChain.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMMChain.java
@@ -35,10 +35,13 @@ import org.apache.sysds.runtime.matrix.data.LibMatrixReorg;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.operators.BinaryOperator;
-public interface CLALibMMChain {
-
+public final class CLALibMMChain {
static final Log LOG = LogFactory.getLog(CLALibMMChain.class.getName());
+ private CLALibMMChain() {
+ // private constructor
+ }
+
public static MatrixBlock mmChain(CompressedMatrixBlock x, MatrixBlock
v, MatrixBlock w, MatrixBlock out,
ChainType ctype, int k) {
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMatrixMult.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMatrixMult.java
index 9fee706143..185b684f65 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMatrixMult.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibMatrixMult.java
@@ -28,9 +28,13 @@ import org.apache.sysds.runtime.matrix.data.LibMatrixReorg;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.operators.ReorgOperator;
-public class CLALibMatrixMult {
+public final class CLALibMatrixMult {
private static final Log LOG =
LogFactory.getLog(CLALibMatrixMult.class.getName());
+ private CLALibMatrixMult(){
+ // private constructor
+ }
+
public static MatrixBlock matrixMult(MatrixBlock m1, MatrixBlock m2,
MatrixBlock ret, int k) {
return matrixMultiply(m1, m2, ret, k, false, false);
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRexpand.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRexpand.java
index c9f8b496ad..01b0ce14db 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRexpand.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRexpand.java
@@ -19,14 +19,19 @@
package org.apache.sysds.runtime.compress.lib;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
import org.apache.sysds.runtime.matrix.data.LibMatrixReorg;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.util.UtilFunctions;
-public class CLALibRexpand {
+public final class CLALibRexpand {
+ protected static final Log LOG =
LogFactory.getLog(CLALibRexpand.class.getName());
- // private static final Log LOG =
LogFactory.getLog(CLALibReExpand.class.getName());
+ private CLALibRexpand(){
+ // private constructor
+ }
public static MatrixBlock rexpand(CompressedMatrixBlock in, MatrixBlock
ret, double max, boolean rows, boolean cast,
boolean ignore, int k) {
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRightMultBy.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRightMultBy.java
index 79e5d7d725..39468b0cab 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRightMultBy.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibRightMultBy.java
@@ -46,9 +46,13 @@ import
org.apache.sysds.runtime.matrix.operators.BinaryOperator;
import org.apache.sysds.runtime.util.CommonThreadPool;
import org.apache.sysds.utils.DMLCompressionStatistics;
-public class CLALibRightMultBy {
+public final class CLALibRightMultBy {
private static final Log LOG =
LogFactory.getLog(CLALibRightMultBy.class.getName());
+ private CLALibRightMultBy(){
+ // private constructor
+ }
+
public static MatrixBlock rightMultByMatrix(CompressedMatrixBlock m1,
MatrixBlock m2, MatrixBlock ret, int k) {
final boolean allowOverlap = ConfigurationManager.getDMLConfig()
.getBooleanValue(DMLConfig.COMPRESSED_OVERLAPPING);
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibScalar.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibScalar.java
index 1540afe059..0860e0f433 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibScalar.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibScalar.java
@@ -48,11 +48,14 @@ import
org.apache.sysds.runtime.matrix.operators.RightScalarOperator;
import org.apache.sysds.runtime.matrix.operators.ScalarOperator;
import org.apache.sysds.runtime.util.CommonThreadPool;
-public class CLALibScalar {
-
+public final class CLALibScalar {
private static final Log LOG =
LogFactory.getLog(CLALibScalar.class.getName());
private static final int MINIMUM_PARALLEL_SIZE = 8096;
+ private CLALibScalar() {
+ // private constructor
+ }
+
public static MatrixBlock scalarOperations(ScalarOperator sop,
CompressedMatrixBlock m1, MatrixValue result) {
if(isInvalidForCompressedOutput(m1, sop)) {
LOG.warn("scalar overlapping not supported for op: " +
sop.fn);
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSlice.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSlice.java
index 4b4ab0e429..2fac4eebd2 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSlice.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSlice.java
@@ -35,10 +35,13 @@ import org.apache.sysds.runtime.data.DenseBlock;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.util.CommonThreadPool;
-public class CLALibSlice {
-
+public final class CLALibSlice {
protected static final Log LOG =
LogFactory.getLog(CLALibSlice.class.getName());
+ private CLALibSlice() {
+ // private constructor
+ }
+
/**
* Slice blocks of compressed matrices from the compressed
representation.
*
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSquash.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSquash.java
index fec3e800e7..f861fac454 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSquash.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibSquash.java
@@ -19,11 +19,37 @@
package org.apache.sysds.runtime.compress.lib;
-import org.apache.commons.lang.NotImplementedException;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
+import org.apache.sysds.runtime.compress.colgroup.AColGroup;
+
+/**
+ * Squash or recompress is processing each column group and trying to find a
better compressed representation for each.
+ */
+public final class CLALibSquash {
-public class CLALibSquash {
+ private CLALibSquash() {
+ // private constructor
+ }
+
+ /**
+ * Squash or recompress is process each column group in the given
Compressed Matrix Block and tries to recompress
+ * each column.
+ *
+ * @param m The input compressed matrix
+ * @param k The parallelization degree allowed in this process
+ * @return A replaced Compressed Matrix Block, note the old block is
also modified
+ */
public static CompressedMatrixBlock squash(CompressedMatrixBlock m, int
k) {
- throw new NotImplementedException();
+ List<AColGroup> before = m.getColGroups();
+ List<AColGroup> groups = new ArrayList<>(before.size());
+
+ for(AColGroup g : before)
+ groups.add(g.recompress());
+
+ m.allocateColGroupList(groups);
+ return m;
}
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombine.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibStack.java
similarity index 98%
rename from
src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombine.java
rename to src/main/java/org/apache/sysds/runtime/compress/lib/CLALibStack.java
index 91238a2927..a1f11573fe 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibCombine.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibStack.java
@@ -39,9 +39,12 @@ import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.data.MatrixIndexes;
import org.apache.sysds.runtime.util.CommonThreadPool;
-public class CLALibCombine {
+public final class CLALibStack {
+ protected static final Log LOG =
LogFactory.getLog(CLALibStack.class.getName());
- protected static final Log LOG =
LogFactory.getLog(CLALibCombine.class.getName());
+ private CLALibStack() {
+ // private constructor
+ }
/**
* Combine the map of index matrix blocks into a single MatrixBlock.
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibTSMM.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibTSMM.java
index ecaaf054fc..bf99adc34b 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibTSMM.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibTSMM.java
@@ -35,9 +35,13 @@ import org.apache.sysds.runtime.matrix.data.LibMatrixMult;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.util.CommonThreadPool;
-public class CLALibTSMM {
+public final class CLALibTSMM {
private static final Log LOG =
LogFactory.getLog(CLALibTSMM.class.getName());
+ private CLALibTSMM() {
+ // private constructor
+ }
+
/**
* Self left Matrix multiplication (tsmm)
*
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibTernaryOp.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibTernaryOp.java
new file mode 100644
index 0000000000..ac1ddd814a
--- /dev/null
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibTernaryOp.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sysds.runtime.compress.lib;
+
+import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
+import org.apache.sysds.runtime.functionobjects.MinusMultiply;
+import org.apache.sysds.runtime.functionobjects.PlusMultiply;
+import
org.apache.sysds.runtime.functionobjects.TernaryValueFunction.ValueFunctionWithConstant;
+import org.apache.sysds.runtime.matrix.data.LibMatrixTercell;
+import org.apache.sysds.runtime.matrix.data.MatrixBlock;
+import org.apache.sysds.runtime.matrix.operators.BinaryOperator;
+import org.apache.sysds.runtime.matrix.operators.TernaryOperator;
+
+public final class CLALibTernaryOp {
+ private CLALibTernaryOp() {
+ // private constructor
+ }
+
+ public static MatrixBlock ternaryOperations(CompressedMatrixBlock m1,
TernaryOperator op, MatrixBlock m2,
+ MatrixBlock m3, MatrixBlock ret) {
+
+ // prepare inputs
+ final int r1 = m1.getNumRows();
+ final int r2 = m2.getNumRows();
+ final int r3 = m3.getNumRows();
+ final int c1 = m1.getNumColumns();
+ final int c2 = m2.getNumColumns();
+ final int c3 = m3.getNumColumns();
+ final boolean s1 = (r1 == 1 && c1 == 1);
+ final boolean s2 = (r2 == 1 && c2 == 1);
+ final boolean s3 = (r3 == 1 && c3 == 1);
+ final double d1 = s1 ? m1.quickGetValue(0, 0) : Double.NaN;
+ final double d2 = s2 ? m2.quickGetValue(0, 0) : Double.NaN;
+ final double d3 = s3 ? m3.quickGetValue(0, 0) : Double.NaN;
+ final int m = Math.max(Math.max(r1, r2), r3);
+ final int n = Math.max(Math.max(c1, c2), c3);
+
+ MatrixBlock.ternaryOperationCheck(s1, s2, s3, m, r1, r2, r3, n,
c1, c2, c3);
+
+ final boolean PM_Or_MM = (op.fn instanceof PlusMultiply ||
op.fn instanceof MinusMultiply);
+ if(PM_Or_MM && ((s2 && d2 == 0) || (s3 && d3 == 0))) {
+ ret = new CompressedMatrixBlock();
+ ret.copy(m1);
+ return ret;
+ }
+
+ if(m2 instanceof CompressedMatrixBlock)
+ m2 = ((CompressedMatrixBlock)
m2).getUncompressed("Ternary Operator arg2 " + op.fn.getClass().getSimpleName(),
+ op.getNumThreads());
+ if(m3 instanceof CompressedMatrixBlock)
+ m3 = ((CompressedMatrixBlock)
m3).getUncompressed("Ternary Operator arg3 " + op.fn.getClass().getSimpleName(),
+ op.getNumThreads());
+
+ if(s2 != s3 && (op.fn instanceof PlusMultiply || op.fn
instanceof MinusMultiply)) {
+ // SPECIAL CASE for sparse-dense combinations of common
+* and -*
+ BinaryOperator bop = ((ValueFunctionWithConstant)
op.fn).setOp2Constant(s2 ? d2 : d3);
+ bop.setNumThreads(op.getNumThreads());
+ ret = CLALibBinaryCellOp.binaryOperationsRight(bop, m1,
s2 ? m3 : m2, ret);
+ }
+ else {
+ final boolean sparseOutput =
MatrixBlock.evalSparseFormatInMemory(m, n, (s1 ? m * n * (d1 != 0 ? 1 : 0) :
m1.getNonZeros()) +
+ Math.min(s2 ? m * n : m2.getNonZeros(), s3 ? m
* n : m3.getNonZeros()));
+ ret.reset(m, n, sparseOutput);
+ final MatrixBlock thisUncompressed =
m1.getUncompressed("Ternary Operation not supported");
+ LibMatrixTercell.tercellOp(thisUncompressed, m2, m3,
ret, op);
+ ret.examSparsity();
+ }
+ return ret;
+ }
+
+}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUnary.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUnary.java
index dee1b9022b..f858f15b74 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUnary.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUnary.java
@@ -21,6 +21,8 @@ package org.apache.sysds.runtime.compress.lib;
import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
import org.apache.sysds.runtime.compress.colgroup.AColGroup;
import org.apache.sysds.runtime.functionobjects.Builtin;
@@ -30,8 +32,12 @@ import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.data.MatrixValue;
import org.apache.sysds.runtime.matrix.operators.UnaryOperator;
-public class CLALibUnary {
- // private static final Log LOG =
LogFactory.getLog(CLALibUnary.class.getName());
+public final class CLALibUnary {
+ protected static final Log LOG =
LogFactory.getLog(CLALibUnary.class.getName());
+
+ private CLALibUnary() {
+ // private constructor
+ }
public static MatrixBlock unaryOperations(CompressedMatrixBlock m,
UnaryOperator op, MatrixValue result) {
final boolean overlapping = m.isOverlapping();
@@ -44,17 +50,22 @@ public class CLALibUnary {
// when in overlapping state it is guaranteed that
there is no infinites, NA, or NANs.
if(Builtin.isBuiltinCode(op.fn, BuiltinCode.ISINF,
BuiltinCode.ISNA, BuiltinCode.ISNAN))
return new MatrixBlock(r, c, 0);
- if(op.fn instanceof Builtin)
- return m.getUncompressed("Unary Op not supported
Overlapping builtin: " + ((Builtin)(op.fn)).getBuiltinCode(),
op.getNumThreads()).unaryOperations(op, null);
- else
- return m.getUncompressed("Unary Op not
supported Overlapping: " + op.fn.getClass().getSimpleName(),
op.getNumThreads()).unaryOperations(op, null);
+ if(op.fn instanceof Builtin) {
+ String message = "Unary Op not supported
Overlapping builtin: " + ((Builtin) (op.fn)).getBuiltinCode();
+ return m.getUncompressed(message,
op.getNumThreads()).unaryOperations(op, null);
+ }
+ else {
+ String message = "Unary Op not supported
Overlapping: " + op.fn.getClass().getSimpleName();
+ return m.getUncompressed(message,
op.getNumThreads()).unaryOperations(op, null);
+ }
}
else if(Builtin.isBuiltinCode(op.fn, BuiltinCode.ISINF,
BuiltinCode.ISNAN, BuiltinCode.ISNA) &&
!m.containsValue(op.getPattern()))
return new MatrixBlock(r, c, 0); // avoid unnecessary
allocation
else if(LibMatrixAgg.isSupportedUnaryOperator(op)) {
+ String message = "Unary Op not supported: " +
op.fn.getClass().getSimpleName();
// e.g., cumsum/cumprod/cummin/cumax/cumsumprod
- return m.getUncompressed("Unary Op not supported: " +
op.fn.getClass().getSimpleName(), op.getNumThreads()).unaryOperations(op, null);
+ return m.getUncompressed(message,
op.getNumThreads()).unaryOperations(op, null);
}
else {
@@ -68,6 +79,5 @@ public class CLALibUnary {
ret.recomputeNonZeros();
return ret;
}
-
}
}
diff --git
a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUtils.java
b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUtils.java
index 1dfe2a0575..06da63d283 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUtils.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibUtils.java
@@ -41,6 +41,10 @@ import
org.apache.sysds.runtime.compress.colgroup.indexes.IIterate;
public final class CLALibUtils {
protected static final Log LOG =
LogFactory.getLog(CLALibUtils.class.getName());
+ private CLALibUtils() {
+ // private constructor
+ }
+
/**
* Combine all column groups that are constant types, this include
empty and const.
*
diff --git
a/src/main/java/org/apache/sysds/runtime/matrix/data/MatrixBlock.java
b/src/main/java/org/apache/sysds/runtime/matrix/data/MatrixBlock.java
index 2ae883ee41..9d79f7f971 100644
--- a/src/main/java/org/apache/sysds/runtime/matrix/data/MatrixBlock.java
+++ b/src/main/java/org/apache/sysds/runtime/matrix/data/MatrixBlock.java
@@ -2987,7 +2987,7 @@ public class MatrixBlock extends MatrixValue implements
CacheBlock<MatrixBlock>,
return ret;
}
- protected static void ternaryOperationCheck(boolean s1, boolean s2,
boolean s3, int m, int r1, int r2, int r3, int n, int c1, int c2, int c3){
+ public static void ternaryOperationCheck(boolean s1, boolean s2,
boolean s3, int m, int r1, int r2, int r3, int n, int c1, int c2, int c3){
//error handling
if( (!s1 && (r1 != m || c1 != n))
|| (!s2 && (r2 != m || c2 != n))
diff --git
a/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
b/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
index 7ab9f8e019..c6d1a4ddcd 100644
---
a/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
+++
b/src/test/java/org/apache/sysds/test/component/compress/colgroup/ColGroupNegativeTests.java
@@ -375,6 +375,18 @@ public class ColGroupNegativeTests {
// TODO Auto-generated method stub
return null;
}
+
+ @Override
+ public AColGroup recompress() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented
method 'recompress'");
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented
method 'getCompressionInfo'");
+ }
}
private class FakeDictBasedColGroup extends ADictBasedColGroup {
@@ -601,5 +613,17 @@ public class ColGroupNegativeTests {
// TODO Auto-generated method stub
return null;
}
+
+ @Override
+ public AColGroup recompress() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented
method 'recompress'");
+ }
+
+ @Override
+ public CompressedSizeInfoColGroup getCompressionInfo(int nRow) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented
method 'getCompressionInfo'");
+ }
}
}
diff --git
a/src/test/java/org/apache/sysds/test/component/compress/combine/CombineTest.java
b/src/test/java/org/apache/sysds/test/component/compress/combine/CombineTest.java
index cfb11cf074..d6d814dc10 100644
---
a/src/test/java/org/apache/sysds/test/component/compress/combine/CombineTest.java
+++
b/src/test/java/org/apache/sysds/test/component/compress/combine/CombineTest.java
@@ -33,7 +33,7 @@ import
org.apache.sysds.runtime.compress.CompressedMatrixBlockFactory;
import org.apache.sysds.runtime.compress.CompressionSettingsBuilder;
import org.apache.sysds.runtime.compress.colgroup.AColGroup;
import org.apache.sysds.runtime.compress.colgroup.AColGroup.CompressionType;
-import org.apache.sysds.runtime.compress.lib.CLALibCombine;
+import org.apache.sysds.runtime.compress.lib.CLALibStack;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.matrix.data.MatrixIndexes;
import org.apache.sysds.test.TestUtils;
@@ -55,7 +55,7 @@ public class CombineTest {
data.put(new MatrixIndexes(2, 1), m1);
try {
- MatrixBlock c = CLALibCombine.combine(data, 100 * 2,
10, 100, k);
+ MatrixBlock c = CLALibStack.combine(data, 100 * 2, 10,
100, k);
assertTrue("The result is not in compressed format", c
instanceof CompressedMatrixBlock);
assertEquals(0.0, c.sum(), 0.0);
}
@@ -76,7 +76,7 @@ public class CombineTest {
data.put(new MatrixIndexes(2, 1), m1);
try {
- MatrixBlock c = CLALibCombine.combine(data, 100 * 2,
10, 100, k);
+ MatrixBlock c = CLALibStack.combine(data, 100 * 2, 10,
100, k);
assertTrue("The result is not in compressed format", c
instanceof CompressedMatrixBlock);
assertEquals(0.0, c.sum(), 100.0 * 10.0 * 2);
}