Hi, I ran another test using a single parallel loop for array based matrix vector multiplication. Throughput almost tripled (Test pasted at bottom):
# Run complete. Total time: 00:13:24 Benchmark Mode Cnt Score Error Units MultiplyBenchmark.parallelMultiplication thrpt 200 2221.682 ± 48.689 ops/s MultiplyBenchmark.singleThreadMultiplication thrpt 200 818.755 ± 9.782 ops/s public class MultiplyBenchmark { public static double[] multiplySingleThreaded(double[][] matrix, double[] vector) { return Arrays.stream(matrix) .mapToDouble(row -> IntStream.range(0, row.length).mapToDouble(col -> row[col] * vector[col]).sum()) .toArray(); } public static double[] multiplyConcurrent(double[][] matrix, double[] vector) { return Arrays.stream(matrix).parallel() .mapToDouble(row -> IntStream.range(0, row.length).mapToDouble(col -> row[col] * vector[col]).sum()) .toArray(); } @State(Scope.Thread) public static class Matrix { static int size = 10000; static double[] vector = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; public static double[][] matrix = new double[size][10]; static { for (int i = 0; i < size; i++) { matrix[i] = vector.clone(); } } } @Benchmark public void singleThreadMultiplication(Matrix m) { multiplySingleThreaded(m.matrix, m.vector); } @Benchmark public void parallelMultiplication(Matrix m) { multiplyConcurrent(m.matrix, m.vector); } } Cheers, Ole --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org