diff --git a/bin/systemds b/bin/systemds
index f0cb0b729b0..2e8e629495b 100755
--- a/bin/systemds
+++ b/bin/systemds
@@ -413,7 +413,6 @@ if [ $WORKER == 1 ]; then
print_out "# starting Federated worker on port $PORT"
CMD=" \
java $SYSTEMDS_STANDALONE_OPTS \
- --add-modules=jdk.incubator.vector \
$LOG4JPROPFULL \
-jar $SYSTEMDS_JAR_FILE \
-w $PORT \
@@ -423,7 +422,6 @@ elif [ "$FEDMONITORING" == 1 ]; then
print_out "# starting Federated backend monitoring on port $PORT"
CMD=" \
java $SYSTEMDS_STANDALONE_OPTS \
- --add-modules=jdk.incubator.vector \
$LOG4JPROPFULL \
-jar $SYSTEMDS_JAR_FILE \
-fedMonitoring $PORT \
@@ -435,7 +433,6 @@ elif [ $SYSDS_DISTRIBUTED == 0 ]; then
CMD=" \
java $SYSTEMDS_STANDALONE_OPTS \
$LOG4JPROPFULL \
- --add-modules=jdk.incubator.vector \
-jar $SYSTEMDS_JAR_FILE \
-f $SCRIPT_FILE \
-exec $SYSDS_EXEC_MODE \
@@ -445,7 +442,6 @@ else
print_out "# Running script $SCRIPT_FILE distributed with opts: $*"
CMD=" \
spark-submit $SYSTEMDS_DISTRIBUTED_OPTS \
- --add-modules=jdk.incubator.vector \
$SYSTEMDS_JAR_FILE \
-f $SCRIPT_FILE \
-exec $SYSDS_EXEC_MODE \
diff --git a/pom.xml b/pom.xml
index f47b76c662e..64616b94de9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,7 +67,7 @@
- 17
+ 11
{java.level}
Testing settings
false
@@ -77,7 +77,6 @@
1C
2
false
- false
**
false
-Xms3000m -Xmx3000m -Xmn300m
@@ -346,9 +345,6 @@
${java.level}
${java.level}
-
- --add-modules=jdk.incubator.vector
-
@@ -371,7 +367,6 @@
file:src/test/resources/log4j.properties
- --add-modules=jdk.incubator.vector
@@ -880,10 +875,9 @@
*.protobuf
true
- false
+ true
true
- --add-modules=jdk.incubator.vector
- ${doc.skip}
+ false
public
diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
index ee33fd77de9..c1b9c65f229 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/ColGroupDDC.java
@@ -26,8 +26,8 @@
import java.util.List;
import java.util.concurrent.ExecutorService;
-import jdk.incubator.vector.DoubleVector;
-import jdk.incubator.vector.VectorSpecies;
+// import jdk.incubator.vector.DoubleVector;
+// import jdk.incubator.vector.VectorSpecies;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.sysds.runtime.DMLRuntimeException;
import org.apache.sysds.runtime.compress.CompressedMatrixBlock;
@@ -75,7 +75,7 @@ public class ColGroupDDC extends APreAgg implements IMapToDataGroup {
protected final AMapToData _data;
- static final VectorSpecies SPECIES = DoubleVector.SPECIES_PREFERRED;
+ // static final VectorSpecies SPECIES = DoubleVector.SPECIES_PREFERRED;
private ColGroupDDC(IColIndex colIndexes, IDictionary dict, AMapToData data, int[] cachedCounts) {
super(colIndexes, dict, cachedCounts);
@@ -611,8 +611,7 @@ private void identityRightDecompressingMult(MatrixBlock right, MatrixBlock ret,
final double[] b = right.getDenseBlockValues();
final double[] c = ret.getDenseBlockValues();
final int jd = right.getNumColumns();
- final DoubleVector vVec = DoubleVector.zero(SPECIES);
- final int vLen = SPECIES.length();
+ final int vLen = 8;
final int lenJ = cru - crl;
final int end = cru - (lenJ % vLen);
for(int i = rl; i < ru; i++) {
@@ -620,7 +619,7 @@ private void identityRightDecompressingMult(MatrixBlock right, MatrixBlock ret,
final int offOut = i * jd + crl;
final double aa = 1;
final int k_right = _colIndexes.get(k);
- vectMM(aa, b, c, end, jd, crl, cru, offOut, k_right, vLen, vVec);
+ vectMM(aa, b, c, end, jd, crl, cru, offOut, k_right, vLen);
}
}
@@ -631,8 +630,8 @@ private void defaultRightDecompressingMult(MatrixBlock right, MatrixBlock ret, i
final double[] c = ret.getDenseBlockValues();
final int kd = _colIndexes.size();
final int jd = right.getNumColumns();
- final DoubleVector vVec = DoubleVector.zero(SPECIES);
- final int vLen = SPECIES.length();
+ // final DoubleVector vVec = DoubleVector.zero(SPECIES);
+ final int vLen = 8;
final int blkzI = 32;
final int blkzK = 24;
@@ -648,31 +647,32 @@ private void defaultRightDecompressingMult(MatrixBlock right, MatrixBlock ret, i
for(int k = bk; k < bke; k++) {
final double aa = a[offi + k];
final int k_right = _colIndexes.get(k);
- vectMM(aa, b, c, end, jd, crl, cru, offOut, k_right, vLen, vVec);
+ vectMM(aa, b, c, end, jd, crl, cru, offOut, k_right, vLen);
}
}
}
}
}
- final void vectMM(double aa, double[] b, double[] c, int endT, int jd, int crl, int cru, int offOut, int k, int vLen, DoubleVector vVec) {
- vVec = vVec.broadcast(aa);
+ final void vectMM(double aa, double[] b, double[] c, int endT, int jd, int crl, int cru, int offOut, int k,
+ int vLen) {
+ // vVec = vVec.broadcast(aa);
final int offj = k * jd;
final int end = endT + offj;
for(int j = offj + crl; j < end; j += vLen, offOut += vLen) {
- DoubleVector res = DoubleVector.fromArray(SPECIES, c, offOut);
- DoubleVector bVec = DoubleVector.fromArray(SPECIES, b, j);
- res = vVec.fma(bVec, res);
- res.intoArray(c, offOut);
-
- // c[offOut] += aa * b[j];
- // c[offOut + 1] += aa * b[j + 1];
- // c[offOut + 2] += aa * b[j + 2];
- // c[offOut + 3] += aa * b[j + 3];
- // c[offOut + 4] += aa * b[j + 4];
- // c[offOut + 5] += aa * b[j + 5];
- // c[offOut + 6] += aa * b[j + 6];
- // c[offOut + 7] += aa * b[j + 7];
+ // DoubleVector res = DoubleVector.fromArray(SPECIES, c, offOut);
+ // DoubleVector bVec = DoubleVector.fromArray(SPECIES, b, j);
+ // res = vVec.fma(bVec, res);
+ // res.intoArray(c, offOut);
+
+ c[offOut] += aa * b[j];
+ c[offOut + 1] += aa * b[j + 1];
+ c[offOut + 2] += aa * b[j + 2];
+ c[offOut + 3] += aa * b[j + 3];
+ c[offOut + 4] += aa * b[j + 4];
+ c[offOut + 5] += aa * b[j + 5];
+ c[offOut + 6] += aa * b[j + 6];
+ c[offOut + 7] += aa * b[j + 7];
}
for(int j = end; j < cru + offj; j++, offOut++) {
double bb = b[j];
diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/dictionary/MatrixBlockDictionary.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/dictionary/MatrixBlockDictionary.java
index d5881c67bd6..57f3a80e03a 100644
--- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/dictionary/MatrixBlockDictionary.java
+++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/dictionary/MatrixBlockDictionary.java
@@ -27,8 +27,6 @@
import java.util.Arrays;
import java.util.Set;
-import jdk.incubator.vector.DoubleVector;
-import jdk.incubator.vector.VectorSpecies;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.sysds.runtime.compress.DMLCompressionException;
import org.apache.sysds.runtime.compress.colgroup.indexes.ArrayIndex;
@@ -67,8 +65,6 @@ public class MatrixBlockDictionary extends ADictionary {
final private MatrixBlock _data;
- static final VectorSpecies SPECIES = DoubleVector.SPECIES_PREFERRED;
-
/**
* Unsafe private constructor that does not check the data validity. USE WITH CAUTION.
*
@@ -2085,102 +2081,7 @@ private void preaggValuesFromDenseDictDenseAggArray(final int numVals, final ICo
private void preaggValuesFromDenseDictDenseAggRange(final int numVals, final IColIndex colIndexes, final int s,
final int e, final double[] b, final int cut, final double[] ret) {
- if(colIndexes instanceof RangeIndex) {
- RangeIndex ri = (RangeIndex) colIndexes;
- preaggValuesFromDenseDictDenseAggRangeRange(numVals, ri.get(0), ri.get(0) + ri.size(), s, e, b, cut, ret);
- }
- else
- preaggValuesFromDenseDictDenseAggRangeGeneric(numVals, colIndexes, s, e, b, cut, ret);
- }
-
- private void preaggValuesFromDenseDictDenseAggRangeRange(final int numVals, final int ls, final int le, final int rs,
- final int re, final double[] b, final int cut, final double[] ret) {
- final int cz = le - ls;
- final int az = re - rs;
- // final int nCells = numVals * cz;
- final double[] values = _data.getDenseBlockValues();
- // Correctly named ikj matrix multiplication .
-
- final int blkzI = 32;
- final int blkzK = 24;
- final int blkzJ = 1024;
- for(int bi = 0; bi < numVals; bi += blkzI) {
- final int bie = Math.min(numVals, bi + blkzI);
- for(int bk = 0; bk < cz; bk += blkzK) {
- final int bke = Math.min(cz, bk + blkzK);
- for(int bj = 0; bj < az; bj += blkzJ) {
- final int bje = Math.min(az, bj + blkzJ);
- final int sOffT = rs + bj;
- final int eOffT = rs + bje;
- preaggValuesFromDenseDictBlockedIKJ(values, b, ret, bi, bk, bj, bie, bke, cz, az, ls, cut, sOffT, eOffT);
- // preaggValuesFromDenseDictBlockedIJK(values, b, ret, bi, bk, bj, bie, bke, bje, cz, az, ls, cut, sOffT, eOffT);
- }
- }
- }
- }
-
- // private static void preaggValuesFromDenseDictBlockedIJK(double[] a, double[] b, double[] ret, int bi, int bk, int bj,
- // int bie, int bke, int bje, int cz, int az, int ls, int cut, int sOffT, int eOffT) {
- // final int vLen = SPECIES.length();
- // final DoubleVector vVec = DoubleVector.zero(SPECIES);
- // for(int i = bi; i < bie; i++) {
- // final int offI = i * cz;
- // final int offOutT = i * az + bj;
- // int offOut = offOutT;
- // final int end = (bje - bj) % vLen;
- // for(int j = bj + sOffT; j < end + sOffT; j += vLen, offOut += vLen) {
- // final DoubleVector res = DoubleVector.fromArray(SPECIES, ret, offOut);
- // for(int k = bk; k < bke; k++) {
- // final int idb = (k + ls) * cut;
- // final double v = a[offI + k];
- // vVec.broadcast(v);
- // DoubleVector bVec = DoubleVector.fromArray(SPECIES, b, idb + j);
- // vVec.fma(bVec, res);
- // }
- // res.intoArray(ret, offOut);
- // }
- // for(int j = end + sOffT; j < bje + sOffT; j++, offOut++) {
- // for(int k = bk; k < bke; k++) {
- // final int idb = (k + ls) * cut;
- // final double v = a[offI + k];
- // ret[offOut] += v * b[idb + j];
- // }
- // }
- // }
- // }
-
- private static void preaggValuesFromDenseDictBlockedIKJ(double[] a, double[] b, double[] ret, int bi, int bk, int bj,
- int bie, int bke, int cz, int az, int ls, int cut, int sOffT, int eOffT) {
- final int vLen = SPECIES.length();
- final DoubleVector vVec = DoubleVector.zero(SPECIES);
- final int leftover = sOffT - eOffT % vLen; // leftover not vectorized
- for(int i = bi; i < bie; i++) {
- final int offI = i * cz;
- final int offOutT = i * az + bj;
- for(int k = bk; k < bke; k++) {
- final int idb = (k + ls) * cut;
- final int sOff = sOffT + idb;
- final int eOff = eOffT + idb;
- final double v = a[offI + k];
- vecInnerLoop(v, b, ret, offOutT, eOff, sOff, leftover, vLen, vVec);
- }
- }
- }
-
- private static void vecInnerLoop(final double v, final double[] b, final double[] ret, final int offOutT,
- final int eOff, final int sOff, final int leftover, final int vLen, DoubleVector vVec) {
- int offOut = offOutT;
- vVec = vVec.broadcast(v);
- final int end = eOff - leftover;
- for(int j = sOff; j < end; j += vLen, offOut += vLen) {
- DoubleVector res = DoubleVector.fromArray(SPECIES, ret, offOut);
- DoubleVector bVec = DoubleVector.fromArray(SPECIES, b, j);
- vVec.fma(bVec, res).intoArray(ret, offOut);
- }
- for(int j = end; j < eOff; j++, offOut++) {
- ret[offOut] += v * b[j];
- }
-
+ preaggValuesFromDenseDictDenseAggRangeGeneric(numVals, colIndexes, s, e, b, cut, ret);
}
private void preaggValuesFromDenseDictDenseAggRangeGeneric(final int numVals, final IColIndex colIndexes,
diff --git a/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixMult.java b/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixMult.java
index 7e7cc62cb43..ba7553cc501 100644
--- a/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixMult.java
+++ b/src/main/java/org/apache/sysds/runtime/matrix/data/LibMatrixMult.java
@@ -29,8 +29,6 @@
import java.util.concurrent.Future;
import java.util.stream.IntStream;
-import jdk.incubator.vector.DoubleVector;
-import jdk.incubator.vector.VectorSpecies;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -81,7 +79,6 @@ public class LibMatrixMult
public static final int L2_CACHESIZE = 256 * 1024; //256KB (common size)
public static final int L3_CACHESIZE = 16 * 1024 * 1024; //16MB (common size)
private static final Log LOG = LogFactory.getLog(LibMatrixMult.class.getName());
- static final VectorSpecies SPECIES = DoubleVector.SPECIES_PREFERRED;
private LibMatrixMult() {
@@ -253,8 +250,8 @@ public static MatrixBlock matrixMult(MatrixBlock m1, MatrixBlock m2, MatrixBlock
else
parallelMatrixMult(m1, m2, ret, k, ultraSparse, sparse, tm2, m1Perm);
- // System.out.println("MM "+k+" ("+m1.isInSparseFormat()+","+m1.getNumRows()+","+m1.getNumColumns()+","+m1.getNonZeros()+")x" +
- // "("+m2.isInSparseFormat()+","+m2.getNumRows()+","+m2.getNumColumns()+","+m2.getNonZeros()+") in "+time.stop());
+ //System.out.println("MM "+k+" ("+m1.isInSparseFormat()+","+m1.getNumRows()+","+m1.getNumColumns()+","+m1.getNonZeros()+")x" +
+ // "("+m2.isInSparseFormat()+","+m2.getNumRows()+","+m2.getNumColumns()+","+m2.getNonZeros()+") in "+time.stop());
return ret;
}
@@ -268,14 +265,8 @@ private static void singleThreadedMatrixMult(MatrixBlock m1, MatrixBlock m2, Mat
// core matrix mult computation
if(ultraSparse && !fixedRet)
matrixMultUltraSparse(m1, m2, ret, m1Perm, 0, ru2);
- else if( ret.sparse ) //ultra-sparse
- matrixMultUltraSparse(m1, m2, ret, m1Perm, 0, ru2);
else if(!m1.sparse && !m2.sparse && !ret.sparse)
- if(m1.denseBlock instanceof DenseBlockFP64DEDUP && m2.denseBlock.isContiguous(0,m1.clen))
- matrixMultDenseDenseMMDedup((DenseBlockFP64DEDUP) m1.denseBlock, m2.denseBlock,
- (DenseBlockFP64DEDUP) ret.denseBlock, m2.clen, m1.clen, 0, ru2, new ConcurrentHashMap<>());
- else
- matrixMultDenseDense(m1, m2, ret, tm2, pm2, 0, ru2, 0, m2.clen);
+ matrixMultDenseDense(m1, m2, ret, tm2, pm2, 0, ru2, 0, m2.clen);
else if(m1.sparse && m2.sparse)
matrixMultSparseSparse(m1, m2, ret, pm2, ret.sparse, 0, ru2);
else if(m1.sparse)
@@ -792,10 +783,10 @@ public static void matrixMultWSigmoid(MatrixBlock mW, MatrixBlock mU, MatrixBloc
*/
public static void matrixMultWDivMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock mX, MatrixBlock ret, WDivMMType wt) {
//check for empty result
- if( mW.isEmptyBlock(true)
- || (wt.isLeft() && mU.isEmptyBlock(true))
- || (wt.isRight() && mV.isEmptyBlock(true))
- || (wt.isBasic() && mW.isEmptyBlock(true))) {
+ if( mW.isEmptyBlock(false)
+ || (wt.isLeft() && mU.isEmptyBlock(false))
+ || (wt.isRight() && mV.isEmptyBlock(false))
+ || (wt.isBasic() && mW.isEmptyBlock(false))) {
ret.examSparsity(); //turn empty dense into sparse
return;
}
@@ -840,10 +831,10 @@ else if( mW.sparse && !mU.sparse && !mV.sparse && (mX==null || mX.sparse || scal
*/
public static void matrixMultWDivMM(MatrixBlock mW, MatrixBlock mU, MatrixBlock mV, MatrixBlock mX, MatrixBlock ret, WDivMMType wt, int k) {
//check for empty result
- if( mW.isEmptyBlock(true)
- || (wt.isLeft() && mU.isEmptyBlock(true))
- || (wt.isRight() && mV.isEmptyBlock(true))
- || (wt.isBasic() && mW.isEmptyBlock(true))) {
+ if( mW.isEmptyBlock(false)
+ || (wt.isLeft() && mU.isEmptyBlock(false))
+ || (wt.isRight() && mV.isEmptyBlock(false))
+ || (wt.isBasic() && mW.isEmptyBlock(false))) {
ret.examSparsity(); //turn empty dense into sparse
return;
}
@@ -1744,10 +1735,10 @@ private static void matrixMultSparseSparseMM(SparseBlock a, SparseBlock b, Dense
if( a.isEmpty(i) ) continue;
final int apos = a.pos(i);
final int alen = a.size(i);
- final int[] aix = a.indexes(i);
- final double[] avals = a.values(i);
- final double[] cvals = c.values(i);
- final int cix = c.pos(i);
+ int[] aix = a.indexes(i);
+ double[] avals = a.values(i);
+ double[] cvals = c.values(i);
+ int cix = c.pos(i);
int k = curk[i-bi] + apos;
for(; k < apos+alen && aix[k]