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));
    }
}