Repository: systemml Updated Branches: refs/heads/master a918d5778 -> 58f4ea9fe
[MINOR] Fix compressed column aggregates w/ UC group (shift corrections) This patch fixes hidden issues of compressed column aggregates over compressed matrices with UC (uncompressed) groups which did not properly handle the shifting of corrections (e.g., for Kahan addition). The issue was hidden because it only shows up if the wrong corrections lead to significantly different results. Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/58f4ea9f Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/58f4ea9f Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/58f4ea9f Branch: refs/heads/master Commit: 58f4ea9fe582e293707ac4c1903be21ab20149e7 Parents: a918d57 Author: Matthias Boehm <[email protected]> Authored: Fri Dec 29 12:12:08 2017 -0800 Committer: Matthias Boehm <[email protected]> Committed: Fri Dec 29 12:12:08 2017 -0800 ---------------------------------------------------------------------- .../sysml/runtime/compress/ColGroupUncompressed.java | 12 +++++++----- .../functions/compress/BasicUnaryAggregateTest.java | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/58f4ea9f/src/main/java/org/apache/sysml/runtime/compress/ColGroupUncompressed.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/compress/ColGroupUncompressed.java b/src/main/java/org/apache/sysml/runtime/compress/ColGroupUncompressed.java index b610adf..1032d89 100644 --- a/src/main/java/org/apache/sysml/runtime/compress/ColGroupUncompressed.java +++ b/src/main/java/org/apache/sysml/runtime/compress/ColGroupUncompressed.java @@ -357,15 +357,17 @@ public class ColGroupUncompressed extends ColGroup //shift result into correct column indexes if( op.indexFn instanceof ReduceRow ) { - //clear corrections - for( int i=0; i<_colIndexes.length; i++ ) - if( op.aggOp.correctionExists ) - ret.quickSetValue(0, i+_colIndexes.length, 0); - //shift partial results + //shift partial results, incl corrections for( int i=_colIndexes.length-1; i>=0; i-- ) { double val = ret.quickGetValue(0, i); ret.quickSetValue(0, i, 0); ret.quickSetValue(0, _colIndexes[i], val); + if( op.aggOp.correctionExists ) + for(int j=1; j<ret.getNumRows(); j++) { + double corr = ret.quickGetValue(j, i); + ret.quickSetValue(j, i, 0); + ret.quickSetValue(j, _colIndexes[i], corr); + } } } } http://git-wip-us.apache.org/repos/asf/systemml/blob/58f4ea9f/src/test/java/org/apache/sysml/test/integration/functions/compress/BasicUnaryAggregateTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/sysml/test/integration/functions/compress/BasicUnaryAggregateTest.java b/src/test/java/org/apache/sysml/test/integration/functions/compress/BasicUnaryAggregateTest.java index df54964..9edaf9c 100644 --- a/src/test/java/org/apache/sysml/test/integration/functions/compress/BasicUnaryAggregateTest.java +++ b/src/test/java/org/apache/sysml/test/integration/functions/compress/BasicUnaryAggregateTest.java @@ -1076,7 +1076,7 @@ public class BasicUnaryAggregateTest extends AutomatedTestBase if( compress ) cmb.compress(); - //matrix-vector uncompressed + //matrix-vector uncompressed MatrixBlock ret1 = (MatrixBlock)mb.aggregateUnaryOperations(auop, new MatrixBlock(), 1000, 1000, null, true); //matrix-vector compressed
