DAS_2023_1/tepechin_kirill_lab_5/README.md

65 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Лабораторная работа №5, Тепечин Кирилл
### Код
#### Обычный код
````java
public static int[][] multiplySync(int[][] a, int[][] b) {
final int[][] result = new int[a.length][b[0].length];
for (int i = 0; i < a.length; ++i) {
for (int j = 0; j < b[0].length; ++j) {
result[i][j] = calculateSingleValue(i, j, a, b);
}
}
return result;
}
private static int calculateSingleValue(int i, int j, int[][] a, int[][] b) {
int result = 0;
for (int k = 0; k < a[0].length; ++k) {
result += a[i][k] * b[k][j];
}
return result;
}
````
#### Параллельный код
````java
final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public static int[][] multiplyAsync(int[][] a, int[][] b, ExecutorService executor) throws InterruptedException {
final int[][] result = new int[a.length][b[0].length];
for (int i = 0; i < a.length; ++i) {
final int fi = i;
executor.execute(() -> {
for (int j = 0; j < b[0].length; ++j) {
for (int k = 0; k < a[0].length; ++k) {
result[fi][j] += a[fi][k] * b[k][j];
}
}
});
}
executor.shutdown();
executor.awaitTermination(1, TimeUnit.DAYS);
return result;
}
````
### Тесты
Тесты проводились на 16 потоках
![result](result.png)
### Выводы
* На матрице 100x100 последовательное вычисление быстрее, затрачивается всего 3 мс.
* На матрице 300x300 вычисления занимают примерно одинаковое время.
* На матрице 500x500 параллельное вычисление выполняется уже в 4 раза быстрее
### Ссылка на видео
https://youtu.be/GPjedqzwvt4