Description
In matrix multiplication, Sparse Matrices can easily turn dense and bloat memory, one fully dense column and one fully dense row can cause a sparse %*% sparse operation have a dense result.
There are two issues here one with a quick Fix and one a bit more involved:
- in ABt.Scala use check the `MatrixFlavor` of the combiner and use the flavor of the Block as the resulting Sparse or Dense matrix type:
val comb = if (block.getFlavor == MatrixFlavor.SPARSELIKE) { new SparseMatrix(prodNCol, block.nrow).t } else { new DenseMatrix(prodNCol, block.nrow).t }
a simlar check needs to be made in the blockify transformation.
- More importantly, and more involved is to do an actual analysis of the resulting matrix data in the in-core mmul class and use a matrix of the appropriate Structure as a result.