Repository: incubator-systemml
Updated Branches:
  refs/heads/master 659680d32 -> a312decb7


[SYSTEMML-382] Performance sparse matrix block deserialization / reset

Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/a312decb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/a312decb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/a312decb

Branch: refs/heads/master
Commit: a312decb7d80da4b2aaf8ce163514aeb9f470ac9
Parents: 659680d
Author: Matthias Boehm <[email protected]>
Authored: Thu Jan 21 21:35:48 2016 -0800
Committer: Matthias Boehm <[email protected]>
Committed: Fri Jan 22 11:35:46 2016 -0800

----------------------------------------------------------------------
 .../sysml/runtime/matrix/data/MatrixBlock.java  | 20 ++++++--------------
 .../runtime/matrix/data/SparseBlockCOO.java     | 12 +++++++-----
 .../runtime/matrix/data/SparseBlockCSR.java     | 10 ++++++----
 3 files changed, 19 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/a312decb/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 6e22d37..22c6347 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
@@ -1962,21 +1962,13 @@ public class MatrixBlock extends MatrixValue implements 
Externalizable
                }
                else //default deserialize
                {
-                       //TODO perf sparse block
-                       
-                       for(int r=0; r<rlen; r++)
-                       {
-                               int nr=in.readInt();
-                               if(nr==0)
-                               {
-                                       if(!sparseBlock.isEmpty(r))
-                                               sparseBlock.reset(r, 
estimatedNNzsPerRow, clen);
-                                       continue;
+                       for(int r=0; r<rlen; r++) {
+                               int rnnz = in.readInt(); //row nnz
+                               if( rnnz > 0 ) {
+                                       sparseBlock.reset(r, rnnz, clen);
+                                       for(int j=0; j<rnnz; j++) //col 
index/value pairs
+                                               sparseBlock.append(r, 
in.readInt(), in.readDouble());           
                                }
-                               
-                               sparseBlock.reset(r, nr, clen);
-                               for(int j=0; j<nr; j++)
-                                       sparseBlock.append(r, in.readInt(), 
in.readDouble());
                        }
                }
        }

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/a312decb/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCOO.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCOO.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCOO.java
index c499b31..eea0754 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCOO.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCOO.java
@@ -166,11 +166,13 @@ public class SparseBlockCOO extends SparseBlock
                int pos = pos(r);
                int len = size(r);
                
-               //overlapping array copy (shift rhs values left)
-               System.arraycopy(_rindexes, pos+len, _rindexes, pos, 
_size-(pos+len));
-               System.arraycopy(_cindexes, pos+len, _cindexes, pos, 
_size-(pos+len));
-               System.arraycopy(_values, pos+len, _values, pos, 
_size-(pos+len));
-               _size -= len;                           
+               if( len > 0 ) {
+                       //overlapping array copy (shift rhs values left)
+                       System.arraycopy(_rindexes, pos+len, _rindexes, pos, 
_size-(pos+len));
+                       System.arraycopy(_cindexes, pos+len, _cindexes, pos, 
_size-(pos+len));
+                       System.arraycopy(_values, pos+len, _values, pos, 
_size-(pos+len));
+                       _size -= len;   
+               }
        }
        
        @Override

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/a312decb/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
index fc3a56f..139cec3 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
@@ -168,10 +168,12 @@ public class SparseBlockCSR extends SparseBlock
                int pos = pos(r);
                int len = size(r);
                
-               //overlapping array copy (shift rhs values left)
-               System.arraycopy(_indexes, pos+len, _indexes, pos, 
_size-(pos+len));
-               System.arraycopy(_values, pos+len, _values, pos, 
_size-(pos+len));
-               _size -= len;                           
+               if( len > 0 ) {
+                       //overlapping array copy (shift rhs values left)
+                       System.arraycopy(_indexes, pos+len, _indexes, pos, 
_size-(pos+len));
+                       System.arraycopy(_values, pos+len, _values, pos, 
_size-(pos+len));
+                       _size -= len;   
+               }
        }
        
        @Override

Reply via email to