tepechin_kirill_lab_5
This commit is contained in:
parent
bbeb924b57
commit
0eb56e61da
65
tepechin_kirill_lab_5/README.md
Normal file
65
tepechin_kirill_lab_5/README.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
## Лабораторная работа №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
|
BIN
tepechin_kirill_lab_5/result.png
Normal file
BIN
tepechin_kirill_lab_5/result.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
Loading…
Reference in New Issue
Block a user