This is an automated email from the ASF dual-hosted git repository.

mboehm7 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemds.git


The following commit(s) were added to refs/heads/master by this push:
     new 6308847  [MINOR] Fix compressed OLE matrix-vector operations
6308847 is described below

commit 6308847f9a6dd3c74edd5a3ef9b62fb2ad2d4511
Author: Matthias Boehm <[email protected]>
AuthorDate: Thu Sep 10 13:40:05 2020 +0200

    [MINOR] Fix compressed OLE matrix-vector operations
    
    This patch partially fixes an issue with cache-conscious OLE
    matrix-vector operations. However, it only fixes the issues for
    single-threaded operations, while multi-threaded ops still run into
    index out-of-bounds issues on covtype.
---
 .../org/apache/sysds/runtime/compress/CompressedMatrixBlock.java  | 5 ++++-
 .../org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java   | 8 ++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java 
b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
index aaf75901..a2336b7 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/CompressedMatrixBlock.java
@@ -982,9 +982,12 @@ public class CompressedMatrixBlock extends 
AbstractCompressedMatrixBlock {
                        // uc.rightMultByVector(vector, result, k);
 
                        // compute remaining compressed column groups in 
parallel
+                       // note: OLE needs alignment to segment size, otherwise 
wrong entry
                        ExecutorService pool = CommonThreadPool.get(k);
                        int rlen = getNumRows();
-                       int blklen = getAlignedBlockSize((int) 
(Math.ceil((double) rlen / k)));
+                       int seqsz = CompressionSettings.BITMAP_BLOCK_SZ;
+                       int blklen = (int)(Math.ceil((double)rlen/k));
+                       blklen += (blklen%seqsz != 0)?seqsz-blklen%seqsz:0;
                        ArrayList<RightMatrixMultTask> tasks = new 
ArrayList<>();
                        for(int i = 0; i < k & i * blklen < getNumRows(); i++)
                                tasks.add(
diff --git 
a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java 
b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
index 44c0c47..6a0d2e0 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupOLE.java
@@ -333,13 +333,13 @@ public class ColGroupOLE extends ColGroupOffset {
                                        double val = aval[k];
                                        int bix = apos[k];
 
-                                       int len = _data[boff + bix];
-                                       int pos = boff + bix + 1;
-                                       // LOG.error("Len: "+pos +  " pos: "+bi 
+ " ii " + len);
                                        for(int ii = bi; ii < bimax && bix < 
blen; ii += blksz) {
                                                // prepare length, start, and 
end pos
+                                               int len = _data[boff + bix];
+                                               int pos = boff + bix + 1;
+                                               
                                                // compute partial results
-                                               LinearAlgebraUtils.vectAdd(val, 
c, _data, pos, ii, Math.min(len, ru));
+                                               LinearAlgebraUtils.vectAdd(val, 
c, _data, pos, ii, Math.min(len,ru));
                                                bix += len + 1;
                                        }
 

Reply via email to