You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2018/06/28 05:30:00 UTC
systemml git commit: [SYSTEMML-2426] Fix integer overflow in tsmm
over dense blocks >16GB.
Repository: systemml
Updated Branches:
refs/heads/master 2cf78819d -> 26d63806e
[SYSTEMML-2426] Fix integer overflow in tsmm over dense blocks >16GB.
This patch fixes a severe integer overflow in dense transpose-self
matrix multiplications (tsmm) over large dense blocks >16GB (scale-up).
Specifically, the start index computation for 4-way vector-multiply-add,
was done in terms of overall matrix indexes (which can overflow for
large dense blocks) instead of chunk-wise index offsets.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/26d63806
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/26d63806
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/26d63806
Branch: refs/heads/master
Commit: 26d63806e663c6e5c08143bc944bcd26fac9431c
Parents: 2cf7881
Author: Matthias Boehm <mb...@gmail.com>
Authored: Wed Jun 27 22:30:38 2018 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Wed Jun 27 22:30:38 2018 -0700
----------------------------------------------------------------------
.../sysml/runtime/matrix/data/LibMatrixMult.java | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/26d63806/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
index c6189ab..1b7b8f4 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixMult.java
@@ -1077,7 +1077,7 @@ public class LibMatrixMult
int bkpos = b.pos(bk, bj);
//determine nnz of a (for sparsity-aware skipping of rows)
- int knnz = copyNonZeroElements(avals, aixi, bkpos, bj, n, ta, tbi, bklen);
+ int knnz = copyNonZeroElements(avals, aixi, bkpos, n, ta, tbi, bklen);
//rest not aligned to blocks of 4 rows
final int bn = knnz % 4;
@@ -1743,9 +1743,10 @@ public class LibMatrixMult
if( a.isContiguous(bk, bkmin-1) ) {
double[] avals = a.values(bk);
int aixi = a.pos(bk, i);
+ int bkpos = a.pos(bk, bj);
//determine nnz of a (for sparsity-aware skipping of rows)
- int knnz = copyNonZeroElements(avals, aixi, bk, bj, n, nx, ta, tbi, bklen);
+ int knnz = copyNonZeroElements(avals, aixi, bkpos, n, nx, ta, tbi, bklen);
//rest not aligned to blocks of 4 rows
final int bn = knnz % 4;
@@ -3797,8 +3798,8 @@ public class LibMatrixMult
return ret;
}
- private static int copyNonZeroElements( double[] a, final int aixi, final int bixk, final int bj, final int n, double[] tmpa, int[] tmpbi, final int bklen )
- {
+ //cp non-zeros for dense-dense mm
+ private static int copyNonZeroElements( double[] a, final int aixi, final int bixk, final int n, double[] tmpa, int[] tmpbi, final int bklen ) {
int knnz = 0;
for( int k = 0; k < bklen; k++ )
if( a[ aixi+k ] != 0 ) {
@@ -3806,20 +3807,18 @@ public class LibMatrixMult
tmpbi[ knnz ] = bixk + k*n;
knnz ++;
}
-
return knnz;
}
- private static int copyNonZeroElements( double[] a, int aixi, final int bk, final int bj, final int n, final int nx, double[] tmpa, int[] tmpbi, final int bklen )
- {
+ //cp non-zeros for dense tsmm
+ private static int copyNonZeroElements( double[] a, int aixi, int bixk, final int n, final int nx, double[] tmpa, int[] tmpbi, final int bklen ) {
int knnz = 0;
- for( int k = 0; k < bklen; k++, aixi+=n )
+ for( int k = 0; k < bklen; k++, aixi+=n, bixk+=nx )
if( a[ aixi ] != 0 ) {
tmpa[ knnz ] = a[ aixi ];
- tmpbi[ knnz ] = (bk+k) * nx + bj; //scan index on b
+ tmpbi[ knnz ] = bixk;
knnz ++;
}
-
return knnz;
}