forked from JavaWebinar/masterjava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainMatrix.java
More file actions
48 lines (40 loc) · 1.97 KB
/
MainMatrix.java
File metadata and controls
48 lines (40 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package ru.javaops.masterjava.matrix;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MainMatrix {
private static final int MATRIX_SIZE = 1000;
private static final int THREAD_NUMBER = 10;
private final static ExecutorService executor = Executors.newFixedThreadPool(MainMatrix.THREAD_NUMBER);
public static void main(String[] args) throws ExecutionException, InterruptedException {
final int[][] matrixA = MatrixUtil.create(MATRIX_SIZE);
final int[][] matrixB = MatrixUtil.create(MATRIX_SIZE);
double singleThreadSum = 0.;
double concurrentThreadSum = 0.;
int count = 1;
while (count < 6) {
System.out.println("Pass " + count);
long start = System.currentTimeMillis();
final int[][] matrixC = MatrixUtil.singleThreadMultiplyOpt(matrixA, matrixB);
double duration = (System.currentTimeMillis() - start) / 1000.;
out("Single thread time, sec: %.3f", duration);
singleThreadSum += duration;
start = System.currentTimeMillis();
final int[][] concurrentMatrixC = MatrixUtil.concurrentMultiplyStreams(matrixA, matrixB, Runtime.getRuntime().availableProcessors() - 1);
duration = (System.currentTimeMillis() - start) / 1000.;
out("Concurrent thread time, sec: %.3f", duration);
concurrentThreadSum += duration;
if (!MatrixUtil.compare(matrixC, concurrentMatrixC)) {
System.err.println("Comparison failed");
break;
}
count++;
}
executor.shutdown();
out("\nAverage single thread time, sec: %.3f", singleThreadSum / 5.);
out("Average concurrent thread time, sec: %.3f", concurrentThreadSum / 5.);
}
private static void out(String format, double ms) {
System.out.println(String.format(format, ms));
}
}