You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2016/01/22 20:37:04 UTC

incubator-systemml git commit: [SYSTEMML-382] Performance sparse matrix block deserialization / reset

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 <mb...@us.ibm.com>
Authored: Thu Jan 21 21:35:48 2016 -0800
Committer: Matthias Boehm <mb...@us.ibm.com>
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