1 public class MatrixMultiply extends Thread{
3 public int x0, y0, x1, y1;
5 public MatrixMultiply(MMul mmul, int x0, int y0, int x1, int y1) {
18 localresults=new int[1+x1-x0][1+y1-y0];
20 for(int i = x0; i<= x1; i++){
24 for (int j = y0; j <= y1; j++) {
26 for(int k = 0; k < M; k++) {
27 innerProduct += a[k] * b[k][j];
29 localresults[i-x0][j-y0]=innerProduct;
35 for(int i=x0;i<=x1;i++) {
37 for(int j=y0;j<=y1;j++) {
38 c[j]=localresults[i-x0][j-y0];
44 public static void main(String[] args) {
45 int mid1 = (128<<24)|(195<<16)|(175<<8)|70;
46 int mid2 = (128<<24)|(195<<16)|(175<<8)|69;
47 int mid3 = (128<<24)|(195<<16)|(175<<8)|71;
55 matrix = global new MMul(70, 70, 70);
60 mm = global new MatrixMultiply[NUM_THREADS];
63 // Currently it is a 70 X 70 matrix divided into 4 blocks
65 mm[0] = global new MatrixMultiply(matrix,0,0,69,35);
66 mm[1] = global new MatrixMultiply(matrix,0,36,69,69);
75 // print out the matrices to be multiplied
76 System.printString("\n");
77 System.printString("MatrixMultiply: L=");
79 System.printString("\t");
80 System.printString("M=");
82 System.printString("\t");
83 System.printString("N=");
85 System.printString("\n");
87 //Print Matrices to be multiplied
89 System.printString("a =\n");
90 for (i = 0; i < p; i++) {
91 for (j = 0; j < q; j++) {
95 System.printString(" " + val);
97 System.printString("\n");
99 System.printString("\n");
101 System.printString("b =\n");
102 for (i = 0; i < q; i++) {
103 for (j = 0; j < r; j++) {
105 val = matrix.b[i][j];
107 System.printString(" " + val);
109 System.printString("\n");
111 System.printString("\n");
114 // start a thread to compute each c[l,n]
115 for (i = 0; i < NUM_THREADS; i++) {
122 // wait for them to finish
123 for (i = 0; i < NUM_THREADS; i++) {
130 // print out the result of the matrix multiply
131 System.printString("Starting\n");
132 System.printString("Matrix Product c =\n");
133 StringBuffer sb = new StringBuffer("");
136 for (i = 0; i < p; i++) {
138 for (j = 0; j < r; j++) {
141 sb.append((new Integer(val)).toString());
146 System.printString(sb.toString());
147 System.printString("Finished\n");
158 public MMul(int L, int M, int N) {
162 a = global new int[L][M];
163 b = global new int[M][N];
164 c = global new int[L][N];
167 public void setValues() {
170 for(i = 0; i < L; i++) {
171 for(j = 0; j < M; j++) {
176 for(i = 0; i < M; i++) {
177 for(j = 0; j < N; j++) {
182 for(i = 0; i < L; i++) {
183 for(j = 0; j < N; j++) {