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: [email protected]
For additional commands, e-mail: [email protected]