diff --git a/pom.xml b/pom.xml
index 5762dc2289e..0f69d5ae01c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1588,5 +1588,19 @@
fastdoubleparser
0.9.0
+
+
+ org.openjdk.jmh
+ jmh-core
+ 1.37
+ test
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ 1.37
+ test
+
+
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 9763e4ea57d..282a1db9c58 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
@@ -2051,7 +2051,7 @@ private static void matrixMultSparseSparseVM(SparseBlock a, SparseBlock b, Dense
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);
}
}
@@ -2069,7 +2069,7 @@ private static long matrixMultSparseSparseSparseMM(SparseBlock a, SparseBlock b,
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;
}
@@ -2100,7 +2100,7 @@ private static void matrixMultSparseSparseMMSmallRHS(SparseBlock a, SparseBlock
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));
}
}
@@ -2132,7 +2132,7 @@ private static void matrixMultSparseSparseMM(SparseBlock a, SparseBlock b, Dense
int k = curk[i-bi] + apos;
for(; k < apos+alen && aix[k]