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
