From 71b6c22c6fc971510b41d3fde19f99ad2e6219e5 Mon Sep 17 00:00:00 2001 From: Sebastian Baunsgaard Date: Mon, 3 Feb 2025 15:18:57 +0100 Subject: [PATCH] Identity Matrix exploit --- .../compress/colgroup/ColGroupDDC.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) 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 86ebb4400e4..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 @@ -601,6 +601,30 @@ public void leftMMIdentityPreAggregateDense(MatrixBlock that, MatrixBlock ret, i @Override public void rightDecompressingMult(MatrixBlock right, MatrixBlock ret, int rl, int ru, int nRows, int crl, int cru) { + if(_dict instanceof IdentityDictionary) + identityRightDecompressingMult(right, ret, rl, ru, crl, cru); + else + defaultRightDecompressingMult(right, ret, rl, ru, crl, cru); + } + + private void identityRightDecompressingMult(MatrixBlock right, MatrixBlock ret, int rl, int ru, int crl, int cru) { + final double[] b = right.getDenseBlockValues(); + final double[] c = ret.getDenseBlockValues(); + final int jd = right.getNumColumns(); + final int vLen = 8; + final int lenJ = cru - crl; + final int end = cru - (lenJ % vLen); + for(int i = rl; i < ru; i++) { + int k = _data.getIndex(i); + 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); + + } + } + + private void defaultRightDecompressingMult(MatrixBlock right, MatrixBlock ret, int rl, int ru, int crl, int cru) { final double[] a = _dict.getValues(); final double[] b = right.getDenseBlockValues(); final double[] c = ret.getDenseBlockValues(); @@ -930,8 +954,6 @@ protected void denseSelection(MatrixBlock selection, P[] points, MatrixBlock ret } } - - private void leftMMIdentityPreAggregateDenseSingleRow(double[] values, int pos, double[] values2, int pos2, int cl, int cu) { IdentityDictionary a = (IdentityDictionary) _dict;