[HOTFIX][SYSTEMML-1959] Fix sparse-sparse transpose w/ CSR input This patch fixes a remaining issue of sparse-sparse transpose related to the correct handling of sparse blocks in CSR or COO format.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/33559144 Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/33559144 Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/33559144 Branch: refs/heads/master Commit: 33559144cd707e324b59ed5ca417e3d5461c2f0a Parents: a347af3 Author: Matthias Boehm <[email protected]> Authored: Sun Oct 15 02:42:20 2017 -0700 Committer: Matthias Boehm <[email protected]> Committed: Sun Oct 15 02:42:20 2017 -0700 ---------------------------------------------------------------------- .../sysml/runtime/matrix/data/LibMatrixReorg.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/33559144/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java index 3ae07c5..dd86c27 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java @@ -859,8 +859,8 @@ public class LibMatrixReorg if( cl > 0 ) { for( int i=bi; i<bimin; i++ ) if( !a.isEmpty(i) ) { - int pos = a.posFIndexGTE(i, cl); - ix[i-bi] = (pos>=0) ? pos : a.size(i); + int j = a.posFIndexGTE(i, cl); + ix[i-bi] = (j>=0) ? j : a.size(i); } } @@ -868,19 +868,19 @@ public class LibMatrixReorg int bjmin = Math.min(bj+blocksizeJ, cu); //core block transpose operation - for( int i=bi, iix=0; i<bimin; i++, iix++ ) { + for( int i=bi; i<bimin; i++ ) { if( a.isEmpty(i) ) continue; int apos = a.pos(i); int alen = a.size(i); int[] aix = a.indexes(i); double[] avals = a.values(i); - int j = ix[iix]; //last block boundary - for( ; j<alen && aix[j]<bjmin; j++ ) { - c.allocate(aix[apos+j], ennz2,n2); - c.append(aix[apos+j], i, avals[apos+j]); + int j = ix[i-bi] + apos; //last block boundary + for( ; j<apos+alen && aix[j]<bjmin; j++ ) { + c.allocate(aix[j], ennz2,n2); + c.append(aix[j], i, avals[j]); } - ix[iix] = j; //keep block boundary + ix[i-bi] = j - apos; //keep block boundary } } }
