[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);

Reply via email to