DAS_2023_1/antonov_dmitry_lab_5/README.md
2023-12-05 13:01:36 +04:00

92 lines
4.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 - Вспоминаем математику или параллельное перемножение матриц
Изучение параллельного умножения матриц
# Задачи
Кратко: реализовать умножение двух больших квадратных матриц.
Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный
(задание со * - реализовать это в рамках одного алгоритма). В параллельном алгоритме предусмотреть
ручное задание количества потоков (число потоков = 1 как раз и реализует задание со *), каждый из
которых будет выполнять умножение элементов матрицы в рамках своей зоны ответственности.
Сделать несколько бенчмарков последовательного и параллельного алгоритма на умножение двух матриц
размером 100x100, 300x300, 500x500 элементов.
# Запуск
Проект запускается в ide просто по нажатию у питон файла на функцию мейн.
Нужно последовательно запустить функцию мейн у файлов simple_app.py, benchmark.py.
# Описание работы:
Развернули два приложения
1. Приложение 1 - веб приложение для умножения матриц
2. Приложение 2 - консольное приложение для сравнения эффективности работы алгоритмов.
Первое приложение дает нам возможность умножить матрицы, получить результат в интерактивном режиме
с указанием используемого алгоритма и с указанием размера матрицы.
В программе предусмотрена возможность задания количества процессов для распараллеливания.
Используется библиотека python multiprocessing.
На рис 3 видно, что с использованием параллельного алгоритма скорость обработки увеличивается довольно
существенно. Но оптимальная скорость достигается при кол-ве потоков = кол-ву потоков процессора
У меня их 16.
<p>
<div>Форма веб приложения для указания парметров умножения матриц</div>
<img src="screens/img.png" width="650" title="Форма веб приложения ">
</p>
<p>
<div>Результат умножения в интерактивном режиме</div>
<img src="screens/img_1.png" width="650" title="Результат умножения">
</p>
<p>
<div>Сравнение бенчмарков</div>
<img src="screens/img_2.png" width="650" title="Сравнение бенчмарков">
</p>
<p>
<div>Параллельное умножение в коде</div>
<img src="screens/img_3.png" width="650" title="Параллельное умножение">
</p>
* Время обычное: 0.43517565727233887 с
* Размер матрицы: 100x100
* Время обычное: 11.15409231185913 с
* Размер матрицы: 300x300
* Время обычное: 53.64867091178894 с
* Размер матрицы: 500x500
* Размер матрицы: 100x100
* Время параллельное: 0.582118034362793 с
* Потоков: 2
* Размер матрицы: 300x300
* Время параллельное: 6.083630800247192 с
* Потоков: 2
* Размер матрицы: 500x500
* Время параллельное: 26.892888069152832 с
* Потоков: 2
* Размер матрицы: 100x100
* Время параллельное: 0.9034981727600098 с
* Потоков: 16
* Размер матрицы: 300x300
* Время параллельное: 2.9237937927246094 с
* Потоков: 16
* Размер матрицы: 500x500
* Время параллельное: 10.55041241645813 с
* Потоков: 16
* Размер матрицы: 100x100
* Время параллельное: 1.5674595832824707 с
* Потоков: 32
* Размер матрицы: 300x300
* Время параллельное: 4.185227394104004 с
* Потоков: 32
* Размер матрицы: 500x500
* Время параллельное: 11.912990808486938 с
* Потоков: 32
# Ссылка на видео
https://disk.yandex.ru/i/I_1oUuNTveYUdg