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

Reply via email to