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 2017/04/17 05:17:26 UTC
incubator-systemml git commit: [SYSTEMML-1531] Performance compressed
rowsums (ddc1 groups, alloc)
Repository: incubator-systemml
Updated Branches:
refs/heads/master e1ae4a9f9 -> cd49f224a
[SYSTEMML-1531] Performance compressed rowsums (ddc1 groups, alloc)
Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/cd49f224
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/cd49f224
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/cd49f224
Branch: refs/heads/master
Commit: cd49f224a02f4d0f03c3b03e36bb8c5cba7edc27
Parents: e1ae4a9
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sun Apr 16 22:15:56 2017 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sun Apr 16 22:15:56 2017 -0700
----------------------------------------------------------------------
.../sysml/runtime/compress/ColGroupDDC1.java | 28 +++++++++++++-------
.../sysml/runtime/compress/ColGroupDDC2.java | 2 +-
.../sysml/runtime/compress/ColGroupOLE.java | 2 +-
.../sysml/runtime/compress/ColGroupRLE.java | 2 +-
.../sysml/runtime/compress/ColGroupValue.java | 7 ++++-
5 files changed, 28 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/cd49f224/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC1.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC1.java b/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC1.java
index 1ff07ac..c9e5c9d 100644
--- a/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC1.java
+++ b/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC1.java
@@ -302,7 +302,7 @@ public class ColGroupDDC1 extends ColGroupDDC
double[] c = result.getDenseBlock();
//pre-aggregate nnz per value tuple
- double[] vals = sumAllValues(kplus, kbuff);
+ double[] vals = sumAllValues(kplus, kbuff, false);
//scan data and add to result (use kahan plus not general KahanFunction
//for correctness in case of sqk+)
@@ -332,14 +332,24 @@ public class ColGroupDDC1 extends ColGroupDDC
//iterative over codes of all groups and add to output
//(use kahan plus not general KahanFunction for correctness in case of sqk+)
int blksz = 1024; //16KB
- for( int bi=rl; bi<ru; bi+=blksz )
- for( int j=0; j<grps.length; j++ )
- for( int i=bi; i<Math.min(bi+blksz, ru); i++ ) {
- kbuff.set(c[2*i], c[2*i+1]);
- kplus2.execute2(kbuff, vals[j][grps[j]._data[i]&0xFF]);
- c[2*i] = kbuff._sum;
- c[2*i+1] = kbuff._correction;
- }
+ double[] tmpAgg = new double[blksz];
+ for( int bi=rl; bi<ru; bi+=blksz ) {
+ Arrays.fill(tmpAgg, 0);
+ //aggregate all groups
+ for( int j=0; j<grps.length; j++ ) {
+ double[] valsj = vals[j];
+ byte[] dataj = grps[j]._data;
+ for( int i=bi; i<Math.min(bi+blksz, ru); i++ )
+ tmpAgg[i-bi] += valsj[dataj[i]&0xFF];
+ }
+ //add partial results of all ddc groups
+ for( int i=bi; i<Math.min(bi+blksz, ru); i++ ) {
+ kbuff.set(c[2*i], c[2*i+1]);
+ kplus2.execute2(kbuff, tmpAgg[i-bi]);
+ c[2*i] = kbuff._sum;
+ c[2*i+1] = kbuff._correction;
+ }
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/cd49f224/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC2.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC2.java b/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC2.java
index b4de6c3..2584a47 100644
--- a/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC2.java
+++ b/src/main/java/org/apache/sysml/runtime/compress/ColGroupDDC2.java
@@ -301,7 +301,7 @@ public class ColGroupDDC2 extends ColGroupDDC
double[] c = result.getDenseBlock();
//pre-aggregate nnz per value tuple
- double[] vals = sumAllValues(kplus, kbuff);
+ double[] vals = sumAllValues(kplus, kbuff, false);
//scan data and add to result (use kahan plus not general KahanFunction
//for correctness in case of sqk+)
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/cd49f224/src/main/java/org/apache/sysml/runtime/compress/ColGroupOLE.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/compress/ColGroupOLE.java b/src/main/java/org/apache/sysml/runtime/compress/ColGroupOLE.java
index bc1d421..b4b9169 100644
--- a/src/main/java/org/apache/sysml/runtime/compress/ColGroupOLE.java
+++ b/src/main/java/org/apache/sysml/runtime/compress/ColGroupOLE.java
@@ -472,7 +472,7 @@ public class ColGroupOLE extends ColGroupOffset
//step 1: prepare position and value arrays
int[] apos = skipScan(numVals, rl);
- double[] aval = sumAllValues(kplus, kbuff);
+ double[] aval = sumAllValues(kplus, kbuff, false);
//step 2: cache conscious row sums via horizontal scans
for( int bi=rl; bi<ru; bi+=blksz2 )
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/cd49f224/src/main/java/org/apache/sysml/runtime/compress/ColGroupRLE.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/compress/ColGroupRLE.java b/src/main/java/org/apache/sysml/runtime/compress/ColGroupRLE.java
index 0e50262..b9fe5d3 100644
--- a/src/main/java/org/apache/sysml/runtime/compress/ColGroupRLE.java
+++ b/src/main/java/org/apache/sysml/runtime/compress/ColGroupRLE.java
@@ -482,7 +482,7 @@ public class ColGroupRLE extends ColGroupOffset
//current pos / values per RLE list
int[] astart = new int[numVals];
int[] apos = skipScan(numVals, rl, astart);
- double[] aval = sumAllValues(kplus, kbuff);
+ double[] aval = sumAllValues(kplus, kbuff, false);
//step 2: cache conscious matrix-vector via horizontal scans
for( int bi=rl; bi<ru; bi+=blksz )
http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/cd49f224/src/main/java/org/apache/sysml/runtime/compress/ColGroupValue.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/compress/ColGroupValue.java b/src/main/java/org/apache/sysml/runtime/compress/ColGroupValue.java
index d8870a4..a374137 100644
--- a/src/main/java/org/apache/sysml/runtime/compress/ColGroupValue.java
+++ b/src/main/java/org/apache/sysml/runtime/compress/ColGroupValue.java
@@ -164,13 +164,18 @@ public abstract class ColGroupValue extends ColGroup
}
protected final double[] sumAllValues(KahanFunction kplus, KahanObject kbuff) {
+ return sumAllValues(kplus, kbuff, true);
+ }
+
+ protected final double[] sumAllValues(KahanFunction kplus, KahanObject kbuff, boolean allocNew) {
//quick path: sum
if( getNumCols()==1 && kplus instanceof KahanPlus )
return _values; //shallow copy of values
//pre-aggregate value tuple
final int numVals = getNumValues();
- double[] ret = new double[numVals];
+ double[] ret = allocNew ? new double[numVals] :
+ allocDVector(numVals, false);
for( int k=0; k<numVals; k++ )
ret[k] = sumValues(k, kplus, kbuff);