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/03/15 17:32:34 UTC
[systemds] 01/04: [SYSTEMDS-2897] CLA decompressing write
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 2bc40ed35e9be42e8442ca5227c61ec10220b7d4
Author: baunsgaard <ba...@tugraz.at>
AuthorDate: Sat Mar 13 11:00:01 2021 +0100
[SYSTEMDS-2897] CLA decompressing write
---
.../runtime/compress/CompressedMatrixBlock.java | 58 ++++++++++------------
.../sysds/runtime/compress/colgroup/AColGroup.java | 2 +
.../runtime/compress/colgroup/ADictionary.java | 2 +
.../compress/colgroup/ColGroupUncompressed.java | 5 ++
.../runtime/compress/colgroup/ColGroupValue.java | 6 +++
.../runtime/compress/colgroup/Dictionary.java | 16 ++++++
.../runtime/compress/colgroup/QDictionary.java | 16 ++++++
.../sysds/runtime/compress/lib/CLALibAppend.java | 9 ++--
.../sysds/runtime/compress/lib/CLALibCompAgg.java | 2 +-
.../runtime/compress/lib/CLALibLeftMultBy.java | 50 +++----------------
.../sysds/runtime/compress/lib/CLALibReExpand.java | 2 +-
.../runtime/compress/lib/CLALibRightMultBy.java | 4 +-
.../sysds/runtime/compress/lib/CLALibScalar.java | 6 ++-
.../sysds/runtime/compress/lib/CLALibSquash.java | 2 +-
.../controlprogram/caching/CacheableData.java | 2 +-
.../controlprogram/caching/MatrixObject.java | 7 ++-
.../apache/sysds/runtime/util/DataConverter.java | 7 ++-
17 files changed, 107 insertions(+), 89 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 f2958da..58688b1 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
@@ -205,32 +205,16 @@ public class CompressedMatrixBlock extends MatrixBlock {
// preallocation sparse rows to avoid repeated reallocations
MatrixBlock ret = new MatrixBlock(rlen, clen, false, -1);
+ if(nonZeros == -1)
+ ret.setNonZeros(this.recomputeNonZeros());
+ else
+ ret.setNonZeros(nonZeros);
ret.allocateDenseBlock();
- // (nonZeros == -1) ?
- // .allocateBlock() : new MatrixBlock(rlen, clen, sparse,
- // nonZeros).allocateBlock();
-
- // if(ret.isInSparseFormat()) {
- // int[] rnnz = new int[rlen];
- // // for(ColGroup grp : _colGroups)
- // // grp.countNonZerosPerRow(rnnz, 0, rlen);
- // ret.allocateSparseRowsBlock();
- // SparseBlock rows = ret.getSparseBlock();
- // for(int i = 0; i < rlen; i++)
- // rows.allocate(i, rnnz[i]);
- // }
+ // todo Add sparse decompress.
- // core decompression (append if sparse)
for(AColGroup grp : _colGroups)
grp.decompressToBlockUnSafe(ret, 0, rlen, 0, grp.getValues());
- // post-processing (for append in decompress)
- if(ret.getNonZeros() == -1 || nonZeros == -1) {
- ret.recomputeNonZeros();
- }
- else {
- ret.setNonZeros(nonZeros);
- }
if(ret.isInSparseFormat())
ret.sortSparseRows();
@@ -256,8 +240,10 @@ public class CompressedMatrixBlock extends MatrixBlock {
Timing time = new Timing(true);
MatrixBlock ret = new MatrixBlock(rlen, clen, false, -1).allocateBlock();
-
- nonZeros = 0;
+ if(nonZeros == -1)
+ ret.setNonZeros(this.recomputeNonZeros());
+ else
+ ret.setNonZeros(nonZeros);
boolean overlapping = isOverlapping();
try {
ExecutorService pool = CommonThreadPool.get(k);
@@ -272,20 +258,13 @@ public class CompressedMatrixBlock extends MatrixBlock {
List<Future<Long>> rtasks = pool.invokeAll(tasks);
pool.shutdown();
for(Future<Long> rt : rtasks)
- nonZeros += rt.get(); // error handling
+ rt.get(); // error handling
}
catch(InterruptedException | ExecutionException ex) {
LOG.error("Parallel decompression failed defaulting to non parallel implementation " + ex.getMessage());
- nonZeros = -1;
ex.printStackTrace();
return decompress();
}
- if(overlapping) {
- ret.recomputeNonZeros();
- }
- else {
- ret.setNonZeros(nonZeros);
- }
if(DMLScript.STATISTICS || LOG.isDebugEnabled()) {
double t = time.stop();
@@ -299,6 +278,22 @@ public class CompressedMatrixBlock extends MatrixBlock {
return CLALibSquash.squash(this, k);
}
+ @Override
+ public long recomputeNonZeros() {
+ if(overlappingColGroups) {
+ nonZeros = clen * rlen;
+ }
+ else {
+ long nnz = 0;
+ for(AColGroup g : _colGroups) {
+ nnz += g.getNumberNonZeros();
+ }
+ nonZeros = nnz;
+ }
+ return nonZeros;
+
+ }
+
/**
* Obtain an upper bound on the memory used to store the compressed block.
*
@@ -497,6 +492,7 @@ public class CompressedMatrixBlock extends MatrixBlock {
CLALibLeftMultBy.leftMultByMatrixTransposed(this, tmp, out, k);
out = LibMatrixReorg.transposeInPlace(out, k);
+ out.recomputeNonZeros();
return out;
}
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 808d43b..33e9d11 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
@@ -646,6 +646,8 @@ public abstract class AColGroup implements Serializable {
public abstract boolean containsValue(double pattern);
+ public abstract long getNumberNonZeros();
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ADictionary.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ADictionary.java
index 8422a3f..10b069e 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ADictionary.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ADictionary.java
@@ -250,4 +250,6 @@ public abstract class ADictionary {
public abstract ADictionary reExpandColumns(int max);
public abstract boolean containsValue(double pattern);
+
+ public abstract long getNumberNonZeros(int[] counts, int nCol);
}
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 824ff8c..1722ffd 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
@@ -543,4 +543,9 @@ public class ColGroupUncompressed extends AColGroup {
public boolean containsValue(double pattern){
return _data.containsValue(pattern);
}
+
+ @Override
+ public long getNumberNonZeros(){
+ return _data.getNonZeros();
+ }
}
diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupValue.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupValue.java
index d0a6ee9..085dd1d 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupValue.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupValue.java
@@ -1030,4 +1030,10 @@ public abstract class ColGroupValue extends AColGroup implements Cloneable {
public boolean containsValue(double pattern){
return _dict.containsValue(pattern);
}
+
+ @Override
+ public long getNumberNonZeros(){
+ int[] counts = getCounts();
+ return _dict.getNumberNonZeros(counts, _colIndexes.length);
+ }
}
diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/Dictionary.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/Dictionary.java
index 658decb..34fea3d 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/Dictionary.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/Dictionary.java
@@ -387,4 +387,20 @@ public class Dictionary extends ADictionary {
return false;
}
+
+ @Override
+ public long getNumberNonZeros(int[] counts, int nCol){
+ long nnz = 0;
+ final int nRow = _values.length / nCol;
+ for(int i = 0; i < nRow; i++){
+ long rowCount = 0;
+ final int off = i * nCol;
+ for(int j = off; j < off + nCol; j++){
+ if(_values[j] != 0)
+ rowCount ++;
+ }
+ nnz += rowCount * counts[i];
+ }
+ return nnz;
+ }
}
diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/QDictionary.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/QDictionary.java
index 05b1817..8986d71 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/QDictionary.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/QDictionary.java
@@ -452,4 +452,20 @@ public class QDictionary extends ADictionary {
return false;
throw new NotImplementedException("Not contains value on Q Dictionary");
}
+
+ @Override
+ public long getNumberNonZeros(int[] counts, int nCol){
+ long nnz = 0;
+ final int nRow = _values.length / nCol;
+ for(int i = 0; i < nRow; i++){
+ long rowCount = 0;
+ final int off = i * nCol;
+ for(int j = off; j < off + nCol; j++){
+ if(_values[j] != 0)
+ rowCount ++;
+ }
+ nnz += rowCount * counts[i];
+ }
+ return nnz;
+ }
}
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 c6bf61d..2ea5397 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
@@ -42,9 +42,7 @@ public class CLALibAppend {
// return left;
final int m = left.getNumRows();
final int n = left.getNumColumns() + right.getNumColumns();
- long nnz = left.getNonZeros() + right.getNonZeros();
- if(left.getNonZeros() < 0 || right.getNonZeros() < 0)
- nnz = -1;
+
// try to compress both sides (if not already compressed).
if(!(left instanceof CompressedMatrixBlock) && m > 1000){
@@ -85,8 +83,11 @@ public class CLALibAppend {
ret.getColGroups().add(tmp);
}
+ long nnzl = (leftC.getNonZeros() <= -1 ) ? leftC.recomputeNonZeros() : leftC.getNonZeros() ;
+ long nnzr = (rightC.getNonZeros() <= -1 ) ? rightC.recomputeNonZeros() : rightC.getNonZeros() ;
+
// meta data maintenance
- ret.setNonZeros(nnz);
+ ret.setNonZeros(nnzl + nnzr);
return ret;
}
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 2eb6888..f7b288d 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
@@ -56,7 +56,7 @@ public class CLALibCompAgg {
// private static final Log LOG = LogFactory.getLog(LibCompAgg.class.getName());
// private static final long MIN_PAR_AGG_THRESHOLD = 8 * 1024 * 1024;
- private static final long MIN_PAR_AGG_THRESHOLD = 8;
+ private static final long MIN_PAR_AGG_THRESHOLD = 8 * 1024 ;
private static ThreadLocal<MatrixBlock> memPool = new ThreadLocal<MatrixBlock>() {
@Override
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 f6390c6..3ef03f3 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
@@ -59,7 +59,9 @@ public class CLALibLeftMultBy {
public static MatrixBlock leftMultByMatrixTransposed(CompressedMatrixBlock m1, MatrixBlock m2, MatrixBlock ret, int k){
MatrixBlock transposed = new MatrixBlock(m2.getNumColumns(), m2.getNumRows(), false);
LibMatrixReorg.transpose(m2, transposed);
- return leftMultByMatrix(m1, transposed, ret, k );
+ ret = leftMultByMatrix(m1, transposed, ret, k );
+ ret.recomputeNonZeros();
+ return ret;
// return LibMatrixReorg.transpose(ret, new MatrixBlock(ret.getNumColumns(), ret.getNumRows(), false));
}
@@ -75,8 +77,10 @@ public class CLALibLeftMultBy {
public static MatrixBlock leftMultByMatrix(CompressedMatrixBlock m1, MatrixBlock m2, MatrixBlock ret, int k) {
prepareReturnMatrix(m1, m2, ret, false);
- return leftMultByMatrix(m1
+ ret = leftMultByMatrix(m1
.getColGroups(), m2, ret, false, m1.getNumColumns(), m1.isOverlapping(), k, m1.getMaxNumValues());
+ ret.recomputeNonZeros();
+ return ret;
}
private static MatrixBlock leftMultByMatrix(List<AColGroup> groups, MatrixBlock that, MatrixBlock ret,
@@ -172,48 +176,6 @@ public class CLALibLeftMultBy {
}
}
- // public static MatrixBlock leftMultByVectorTranspose(List<AColGroup> colGroups, MatrixBlock vector,
- // MatrixBlock result, boolean doTranspose, int k, Pair<Integer, int[]> v, boolean overlap) {
-
- // // transpose vector if required
- // MatrixBlock rowVector = vector;
- // if(doTranspose) {
- // rowVector = new MatrixBlock(1, vector.getNumRows(), false);
- // LibMatrixReorg.transpose(vector, rowVector);
- // }
-
- // result.reset();
- // result.allocateDenseBlock();
-
- // // multi-threaded execution
- // try {
- // // compute uncompressed column group in parallel
- // // ColGroupUncompressed uc = getUncompressedColGroup();
- // // if(uc != null)
- // // uc.leftMultByRowVector(rowVector, result, k);
-
- // // compute remaining compressed column groups in parallel
- // ExecutorService pool = CommonThreadPool.get(Math.min(colGroups.size(), k));
- // ArrayList<LeftMatrixVectorMultTask> tasks = new ArrayList<>();
-
- // tasks.add(new LeftMatrixVectorMultTask(colGroups, rowVector, result, v));
-
- // List<Future<Object>> ret = pool.invokeAll(tasks);
- // pool.shutdown();
- // for(Future<Object> tmp : ret)
- // tmp.get();
-
- // }
- // catch(InterruptedException | ExecutionException e) {
- // throw new DMLRuntimeException(e);
- // }
-
- // // post-processing
- // result.recomputeNonZeros();
-
- // return result;
- // }
-
private static MatrixBlock leftMultByCompressedTransposedMatrix(List<AColGroup> colGroups,
CompressedMatrixBlock that, MatrixBlock ret, int k, int numColumns, Pair<Integer, int[]> v,
boolean overlapping) {
diff --git a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibReExpand.java b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibReExpand.java
index 97cf128..2b4e318 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibReExpand.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/lib/CLALibReExpand.java
@@ -68,8 +68,8 @@ public class CLALibReExpand {
ret.allocateColGroupList(newColGroups);
ret.setOverlapping(true);
- ret.setNonZeros(-1);
+ ret.recomputeNonZeros();
return ret;
}
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 8ce20f2..ec28497 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
@@ -42,7 +42,9 @@ public class CLALibRightMultBy {
private static final Log LOG = LogFactory.getLog(CLALibRightMultBy.class.getName());
public static MatrixBlock rightMultByMatrix(CompressedMatrixBlock m1, MatrixBlock m2, MatrixBlock ret, int k, boolean allowOverlap){
- return rightMultByMatrix(m1.getColGroups(), m2, ret, k, m1.getMaxNumValues(), allowOverlap);
+ ret = rightMultByMatrix(m1.getColGroups(), m2, ret, k, m1.getMaxNumValues(), allowOverlap);
+ ret.recomputeNonZeros();
+ return ret;
}
private static MatrixBlock rightMultByMatrix(List<AColGroup> colGroups, MatrixBlock that, MatrixBlock ret, int k,
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 97a7f67..1c0a980 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
@@ -57,7 +57,9 @@ public class CLALibScalar {
public static MatrixBlock scalarOperations(ScalarOperator sop, CompressedMatrixBlock m1, MatrixValue result) {
// Special case handling of overlapping relational operations
if(CLALibRelationalOp.isValidForRelationalOperation(sop, m1)) {
- return CLALibRelationalOp.overlappingRelativeRelationalOperation(sop, m1);
+ MatrixBlock ret = CLALibRelationalOp.overlappingRelativeRelationalOperation(sop, m1);
+ ret.recomputeNonZeros();
+ return ret;
}
if(isInvalidForCompressedOutput(m1, sop)) {
@@ -96,7 +98,7 @@ public class CLALibScalar {
ret.setOverlapping(m1.isOverlapping());
}
- ret.setNonZeros(-1);
+ ret.recomputeNonZeros();
return ret;
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 b4438b2..63177c5 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
@@ -59,7 +59,7 @@ public class CLALibSquash {
ret.allocateColGroupList(retCg);
ret.setOverlapping(false);
- ret.setNonZeros(-1);
+ ret.recomputeNonZeros();
if(ret.isOverlapping())
throw new DMLCompressionException("Squash should output compressed nonOverlapping matrix");
diff --git a/src/main/java/org/apache/sysds/runtime/controlprogram/caching/CacheableData.java b/src/main/java/org/apache/sysds/runtime/controlprogram/caching/CacheableData.java
index 06de8f7..cf6ab3f 100644
--- a/src/main/java/org/apache/sysds/runtime/controlprogram/caching/CacheableData.java
+++ b/src/main/java/org/apache/sysds/runtime/controlprogram/caching/CacheableData.java
@@ -1040,7 +1040,7 @@ public abstract class CacheableData<T extends CacheBlock> extends Data
protected void writeMetaData (String filePathAndName, String outputFormat, FileFormatProperties formatProperties)
throws IOException
- {
+ {
MetaDataFormat iimd = (MetaDataFormat) _metaData;
if (iimd == null)
diff --git a/src/main/java/org/apache/sysds/runtime/controlprogram/caching/MatrixObject.java b/src/main/java/org/apache/sysds/runtime/controlprogram/caching/MatrixObject.java
index d0bce6e..e55509b 100644
--- a/src/main/java/org/apache/sysds/runtime/controlprogram/caching/MatrixObject.java
+++ b/src/main/java/org/apache/sysds/runtime/controlprogram/caching/MatrixObject.java
@@ -35,6 +35,7 @@ import org.apache.sysds.conf.ConfigurationManager;
import org.apache.sysds.hops.OptimizerUtils;
import org.apache.sysds.lops.Lop;
import org.apache.sysds.runtime.DMLRuntimeException;
+import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
import org.apache.sysds.runtime.controlprogram.ParForProgramBlock.PDataPartitionFormat;
import org.apache.sysds.runtime.controlprogram.context.SparkExecutionContext;
import org.apache.sysds.runtime.controlprogram.federated.FederatedRange;
@@ -583,13 +584,15 @@ public class MatrixObject extends CacheableData<MatrixBlock>
begin = System.currentTimeMillis();
}
- MetaDataFormat iimd = (MetaDataFormat) _metaData;
-
if(this.isFederated() && FileFormat.safeValueOf(ofmt) == FileFormat.FEDERATED){
ReaderWriterFederated.write(fname,this._fedMapping);
}
else if (_data != null)
{
+ if(_data instanceof CompressedMatrixBlock)
+ _data = CompressedMatrixBlock.getUncompressed(_data);
+
+ MetaDataFormat iimd = (MetaDataFormat) _metaData;
// Get the dimension information from the metadata stored within MatrixObject
DataCharacteristics mc = iimd.getDataCharacteristics();
// Write the matrix to HDFS in requested format
diff --git a/src/main/java/org/apache/sysds/runtime/util/DataConverter.java b/src/main/java/org/apache/sysds/runtime/util/DataConverter.java
index c181b5c..51ad590 100644
--- a/src/main/java/org/apache/sysds/runtime/util/DataConverter.java
+++ b/src/main/java/org/apache/sysds/runtime/util/DataConverter.java
@@ -31,6 +31,8 @@ import java.util.Map.Entry;
import java.util.StringTokenizer;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.BlockRealMatrix;
import org.apache.commons.math3.linear.RealMatrix;
@@ -79,7 +81,7 @@ import org.apache.sysds.runtime.meta.DataCharacteristics;
*
*/
public class DataConverter {
- // private static final Log LOG = LogFactory.getLog(DataConverter.class.getName());
+ private static final Log LOG = LogFactory.getLog(DataConverter.class.getName());
private static final String DELIM = " ";
//////////////
@@ -100,6 +102,9 @@ public class DataConverter {
public static void writeMatrixToHDFS(MatrixBlock mat, String dir, FileFormat fmt, DataCharacteristics dc, int replication, FileFormatProperties formatProperties, boolean diag)
throws IOException {
MatrixWriter writer = MatrixWriterFactory.createMatrixWriter( fmt, replication, formatProperties );
+ if(mat instanceof CompressedMatrixBlock)
+ mat = CompressedMatrixBlock.getUncompressed(mat);
+ LOG.error(mat.getNonZeros());
writer.writeMatrixToHDFS(mat, dir, dc.getRows(), dc.getCols(), dc.getBlocksize(), dc.getNonZeros(), diag);
}