Skip to content

Commit a2c0047

Browse files
committed
2 01 HW1 singleThreadMultiplyOpt
1 parent 9e85a11 commit a2c0047

2 files changed

Lines changed: 13 additions & 7 deletions

File tree

src/main/java/ru/javaops/masterjava/matrix/MainMatrix.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc
2424
while (count < 6) {
2525
System.out.println("Pass " + count);
2626
long start = System.currentTimeMillis();
27-
final int[][] matrixC = MatrixUtil.singleThreadMultiply(matrixA, matrixB);
27+
final int[][] matrixC = MatrixUtil.singleThreadMultiplyOpt(matrixA, matrixB);
2828
double duration = (System.currentTimeMillis() - start) / 1000.;
2929
out("Single thread time, sec: %.3f", duration);
3030
singleThreadSum += duration;

src/main/java/ru/javaops/masterjava/matrix/MatrixUtil.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,24 @@ public static int[][] concurrentMultiply(int[][] matrixA, int[][] matrixB, Execu
1818
return matrixC;
1919
}
2020

21-
// TODO optimize by https://habrahabr.ru/post/114797/
22-
public static int[][] singleThreadMultiply(int[][] matrixA, int[][] matrixB) {
21+
// Optimized by https://habrahabr.ru/post/114797/
22+
public static int[][] singleThreadMultiplyOpt(int[][] matrixA, int[][] matrixB) {
2323
final int matrixSize = matrixA.length;
2424
final int[][] matrixC = new int[matrixSize][matrixSize];
2525

26-
for (int i = 0; i < matrixSize; i++) {
27-
for (int j = 0; j < matrixSize; j++) {
26+
for (int col = 0; col < matrixSize; col++) {
27+
final int[] columnB = new int[matrixSize];
28+
for (int k = 0; k < matrixSize; k++) {
29+
columnB[k] = matrixB[k][col];
30+
}
31+
32+
for (int row = 0; row < matrixSize; row++) {
2833
int sum = 0;
34+
final int[] rowA = matrixA[row];
2935
for (int k = 0; k < matrixSize; k++) {
30-
sum += matrixA[i][k] * matrixB[k][j];
36+
sum += rowA[k] * columnB[k];
3137
}
32-
matrixC[i][j] = sum;
38+
matrixC[row][col] = sum;
3339
}
3440
}
3541
return matrixC;

0 commit comments

Comments
 (0)