You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemds.apache.org by mb...@apache.org on 2026/09/29 13:37:14 UTC

(systemds) branch main updated: [SYSTEMDS-3855] Use of VectorAPI in sparse-sparse matmult kernels

This is an automated email from the ASF dual-hosted git repository.

mboehm7 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git


The following commit(s) were added to refs/heads/main by this push:
     new 7a5e18c5b4 [SYSTEMDS-3855] Use of VectorAPI in sparse-sparse matmult kernels
7a5e18c5b4 is described below

commit 7a5e18c5b4d10e01a16de83bab2a7bf26855cd1d
Author: Elman Jahangiri <El...@outlook.de>
AuthorDate: Tue Sep 29 15:35:23 2026 +0200

    [SYSTEMDS-3855] Use of VectorAPI in sparse-sparse matmult kernels
    
    Closes #2553.
---
 .../sysds/runtime/matrix/data/LibMatrixMult.java     | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

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 52953b9c54..9fa0ba51e3 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
@@ -2371,7 +2371,7 @@ public class LibMatrixMult
 				int blen = b.size(aix[k]);
 				int[] bix = b.indexes(aix[k]);
 				double[] bvals = b.values(aix[k]);
-				vectMultiplyAdd(avals[k], bvals, cvals, bix, bpos, 0, blen);
+				vectMultiplyAddScatter(avals[k], bvals, cvals, bix, bpos, 0, blen);
 			}
 	}
 	
@@ -2389,7 +2389,7 @@ public class LibMatrixMult
 			for(int k = apos; k < apos+alen; k++) {
 				int aixk = aix[k];
 				if( b.isEmpty(aixk) ) continue;
-				vectMultiplyAdd(avals[k], b.values(aixk), tmp,
+				vectMultiplyAddScatter(avals[k], b.values(aixk), tmp,
 					b.indexes(aixk), b.pos(aixk), 0, b.size(aixk));
 				hitNonEmpty = true;
 			}
@@ -2420,7 +2420,7 @@ public class LibMatrixMult
 			for(int k = apos; k < apos+alen; k++) {
 				int aixk = aix[k];
 				if( b.isEmpty(aixk) ) continue;
-				vectMultiplyAdd(avals[k], b.values(aixk), cvals,
+				vectMultiplyAddScatter(avals[k], b.values(aixk), cvals,
 					b.indexes(aixk), b.pos(aixk), cix, b.size(aixk));
 			}
 		}
@@ -2452,7 +2452,7 @@ public class LibMatrixMult
 					int k = curk[i-bi] + apos;
 					for(; k < apos+alen && aix[k]<bkmin; k++) {
 						if( b.isEmpty(aix[k]) ) continue;
-						vectMultiplyAdd(avals[k], b.values(aix[k]), cvals,
+						vectMultiplyAddScatter(avals[k], b.values(aix[k]), cvals,
 							b.indexes(aix[k]), b.pos(aix[k]), cix, b.size(aix[k]));
 					}
 					curk[i-bi] = k - apos;
@@ -4621,15 +4621,9 @@ public class LibMatrixMult
 		}
 	}
 
-	private static void vectMultiplyAddScatter(
-		final double aval,
-		double[] b,
-		double[] c,
-		int[] bix,
-		final int bi,
-		final int ci,
-		final int len
-	) {
+	private static void vectMultiplyAddScatter(final double aval, 
+		double[] b, double[] c, int[] bix, final int bi, final int ci, final int len)
+	{
 		final int bn = len % vLen;
 
 		// Scalar tail for remaining elements