commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
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