# commons-dev mailing list archives

##### Site index · List index
Message view
Top
From Ole Ersoy <ole.er...@gmail.com>
Subject Re: [math] Matrix parallel operations
Date Sun, 03 Jan 2016 06:49:36 GMT
```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-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org

```
Mime
View raw message