[MINOR] Performance sparse cbind/rbind (shallow copy on empty rhs) Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/5df6ab6d Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/5df6ab6d Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/5df6ab6d
Branch: refs/heads/master Commit: 5df6ab6dd3f2d879a98d5adcc7dd98fba6245cf2 Parents: 27cabbc Author: Matthias Boehm <[email protected]> Authored: Tue Nov 14 18:13:45 2017 -0800 Committer: Matthias Boehm <[email protected]> Committed: Tue Nov 14 18:45:01 2017 -0800 ---------------------------------------------------------------------- .../java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/5df6ab6d/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java index 91248d2..f176c9a 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java @@ -3545,6 +3545,7 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab final int m = cbind ? rlen : rlen+Arrays.stream(that).mapToInt(mb -> mb.rlen).sum(); final int n = cbind ? clen+Arrays.stream(that).mapToInt(mb -> mb.clen).sum() : clen; final long nnz = nonZeros+Arrays.stream(that).mapToLong(mb -> mb.nonZeros).sum(); + boolean shallowCopy = (nonZeros == nnz); boolean sp = evalSparseFormatInMemory(m, n, nnz); //init result matrix @@ -3577,7 +3578,7 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab //adjust sparse rows if required result.allocateSparseRowsBlock(); //allocate sparse rows once for cbind - if( cbind && nnz > rlen && result.getSparseBlock() instanceof SparseBlockMCSR ) { + if( cbind && nnz > rlen && !shallowCopy && result.getSparseBlock() instanceof SparseBlockMCSR ) { SparseBlock sblock = result.getSparseBlock(); for( int i=0; i<result.rlen; i++ ) { final int row = i; //workaround for lambda compile issue @@ -3588,7 +3589,7 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab } //core append operation - result.appendToSparse(this, 0, 0); + result.appendToSparse(this, 0, 0, !shallowCopy); if( cbind ) { for(int i=0, off=clen; i<that.length; i++) { result.appendToSparse(that[i], 0, off);
