From 3ba8a1b18366ecd596690673bc4636eeefc2ae4a Mon Sep 17 00:00:00 2001 From: Sebastian Baunsgaard Date: Tue, 4 Feb 2025 15:53:52 +0100 Subject: [PATCH] Remove Java17Parts --- bin/systemds | 4 - pom.xml | 12 +-- .../compress/colgroup/ColGroupDDC.java | 48 ++++----- .../dictionary/MatrixBlockDictionary.java | 101 +----------------- .../runtime/matrix/data/LibMatrixMult.java | 88 +++++++-------- 5 files changed, 74 insertions(+), 179 deletions(-) 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} ${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 ${java.level} 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]