Repository: incubator-systemml Updated Branches: refs/heads/master bcd71d346 -> b03950c32
[SYSTEMML-812] Fix multi-threaded tsmm over compressed matrix blocks Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/b03950c3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/b03950c3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/b03950c3 Branch: refs/heads/master Commit: b03950c3283d4020ffd26ef287dc4cd09e50fa95 Parents: bcd71d3 Author: Matthias Boehm <[email protected]> Authored: Fri Aug 12 12:40:44 2016 -0700 Committer: Matthias Boehm <[email protected]> Committed: Fri Aug 12 12:40:44 2016 -0700 ---------------------------------------------------------------------- .../runtime/compress/CompressedMatrixBlock.java | 24 ++++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/b03950c3/src/main/java/org/apache/sysml/runtime/compress/CompressedMatrixBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/compress/CompressedMatrixBlock.java b/src/main/java/org/apache/sysml/runtime/compress/CompressedMatrixBlock.java index 3913721..fac2461 100644 --- a/src/main/java/org/apache/sysml/runtime/compress/CompressedMatrixBlock.java +++ b/src/main/java/org/apache/sysml/runtime/compress/CompressedMatrixBlock.java @@ -1168,9 +1168,10 @@ public class CompressedMatrixBlock extends MatrixBlock implements Externalizable try { ExecutorService pool = Executors.newFixedThreadPool( k ); ArrayList<MatrixMultTransposeTask> tasks = new ArrayList<MatrixMultTransposeTask>(); - int blklen = (int)(Math.ceil((double)clen/(2*k))); + int numgrp = _colGroups.size(); + int blklen = (int)(Math.ceil((double)numgrp/(2*k))); for( int i=0; i<2*k & i*blklen<clen; i++ ) - tasks.add(new MatrixMultTransposeTask(_colGroups, out, i*blklen, Math.min((i+1)*blklen, clen))); + tasks.add(new MatrixMultTransposeTask(_colGroups, out, i*blklen, Math.min((i+1)*blklen, numgrp))); List<Future<Object>> ret = pool.invokeAll(tasks); for( Future<Object> tret : ret ) tret.get(); //check for errors @@ -1330,10 +1331,13 @@ public class CompressedMatrixBlock extends MatrixBlock implements Externalizable /** * + * @param groups * @param result + * @param gl + * @param gu * @throws DMLRuntimeException */ - private static void leftMultByTransposeSelf(ArrayList<ColGroup> groups, MatrixBlock result, int cl, int cu) + private static void leftMultByTransposeSelf(ArrayList<ColGroup> groups, MatrixBlock result, int gl, int gu) throws DMLRuntimeException { final int numRows = groups.get(0).getNumRows(); @@ -1345,7 +1349,7 @@ public class CompressedMatrixBlock extends MatrixBlock implements Externalizable //approach: for each colgroup, extract uncompressed columns one at-a-time //vector-matrix multiplies against remaining col groups - for( int i=cl; i<cu; i++ ) + for( int i=gl; i<gu; i++ ) { //get current group and relevant col groups ColGroup group = groups.get(i); @@ -1479,19 +1483,19 @@ public class CompressedMatrixBlock extends MatrixBlock implements Externalizable { private ArrayList<ColGroup> _groups = null; private MatrixBlock _ret = null; - private int _cl = -1; - private int _cu = -1; + private int _gl = -1; + private int _gu = -1; - protected MatrixMultTransposeTask(ArrayList<ColGroup> groups, MatrixBlock ret, int cl, int cu) { + protected MatrixMultTransposeTask(ArrayList<ColGroup> groups, MatrixBlock ret, int gl, int gu) { _groups = groups; _ret = ret; - _cl = cl; - _cu = cu; + _gl = gl; + _gu = gu; } @Override public Object call() throws DMLRuntimeException { - leftMultByTransposeSelf(_groups, _ret, _cl, _cu); + leftMultByTransposeSelf(_groups, _ret, _gl, _gu); return null; } }
