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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 | package de.se.rwth;
import edu.vu.isis.regtrack.common.Matrix;
public class Main {
public static void main(String[] args) {
long start = 0;
try {
Matrix mat11 = generateMatrix(1000, 2);
Matrix mat21 = generateMatrix(2, 1000);
Matrix mat31 = generateMatrix(1000, 2);
Matrix mat41 = generateMatrix(2, 10000);
Matrix mat51 = generateMatrix(10000, 10000);
Matrix mat12 = generateMatrix(1000, 2);
Matrix mat22 = generateMatrix(2, 1000);
Matrix mat32 = generateMatrix(1000, 2);
Matrix mat42 = generateMatrix(2, 10000);
Matrix mat52 = generateMatrix(10000, 10000);
Matrix mat13 = generateMatrix(1000, 2);
Matrix mat23 = generateMatrix(2, 1000);
Matrix mat33 = generateMatrix(1000, 2);
Matrix mat43 = generateMatrix(2, 10000);
Matrix mat53 = generateMatrix(10000, 10000);
Matrix mat14 = generateMatrix(1000, 2);
Matrix mat24 = generateMatrix(2, 1000);
Matrix mat34 = generateMatrix(1000, 2);
Matrix mat44 = generateMatrix(2, 10000);
Matrix mat54 = generateMatrix(10000, 10000);
start = System.currentTimeMillis();
Thread t1 = new Thread() {
public void run() {
mathUnit(mat11, mat21, mat31, mat41, mat51);
}
};
Thread t2 = new Thread() {
public void run() {
mathUnit(mat12, mat22, mat32, mat42, mat52);
}
};
Thread t3 = new Thread() {
public void run() {
mathUnit(mat13, mat23, mat33, mat43, mat53);
}
};
Thread t4 = new Thread() {
public void run() {
mathUnit(mat14, mat24, mat34, mat44, mat54);
}
};
t1.start();
t2.start();
t3.start();
t4.start();
t1.join();
t2.join();
t3.join();
t4.join();
} catch (Exception ex) {
ex.printStackTrace();
}
long duration = System.currentTimeMillis() - start;
System.out.println("took " + duration + " ms");
}
public static Matrix mathUnit(Matrix mat1, Matrix mat2, Matrix mat3, Matrix mat4, Matrix mat5) {
Matrix h1 = mat1.matrixMultiply(mat2);
Matrix h2 = mat3.matrixMultiply(mat4);
Matrix h3 = h1.matrixMultiply(h2);
return h3.matrixMultiply(mat5);
}
public static Matrix generateMatrix(int n, int m) {
Matrix mat = new Matrix(n, m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
mat.setValueAt(i, j, getRandomNumberBetween(0, 255) / 255.0d);
}
}
return mat;
}
public static int getRandomNumberBetween(int min, int max) {
return min + (int) (Math.random() * ((max - min) + 1));
}
}
|