forked from Alexey/DAS_2023_1
32 lines
3.1 KiB
Markdown
32 lines
3.1 KiB
Markdown
|
## Задание
|
|||
|
Создать программу, производящую параллельные умножения реализовать двух больших квадратных матриц.
|
|||
|
|
|||
|
## Выполнение
|
|||
|
Программа состоит из модуля-сервиса service и модуля для вычислений matrix.
|
|||
|
В модуле для вычислений реализовано:
|
|||
|
* метод do_multiplication, который в обычном режиме одним потоком умножает матрицы. Не используется, т.к. слишком медленный.
|
|||
|
* метод multiply_row, который получает строку матрицы A, транспонированную матрицу B, строку выходной матрицы C, размер матриц и заполняет эту строку проходя по строкам транспонированной матрицы B. Возвращает заполненную строку.
|
|||
|
* метод do_multiplication_parallel, использующий предыдущий, который получает размер матриц и количество процессов, генерирует случайные матрицы заданного размера и производит вычисления.
|
|||
|
* метод прогона эксперимента с заполнением данных результатами. Методы интерфейса доступа.
|
|||
|
|
|||
|
Способ вычисления: в методе do_multiplication_parallel матрица B транспонируется, создаётся объект ThreadPoolExecutor с переданным количеством потоков, который их создаёт и распределяет по ним строки вычисляемой матрицы, а именно передавая им метод multiply_row.
|
|||
|
Если передать методу число 1 в качестве количества потоков, то соответственно вычисление произойдёт в одном потоке.
|
|||
|
|
|||
|
## Результаты
|
|||
|
Был создан Flask сервис, позволяющий получать результаты умножения случайных квадратных матриц.
|
|||
|
Возможно задать размер и количество потоков.
|
|||
|
|
|||
|
Дополнительно возможно провести эксперимент и получить результаты умножения матриц размера 100, 300 и 500 одним, десятью и ста потоками.
|
|||
|
|
|||
|
Поскольку распараллеливание основано на процессах, а в системе имеется 6 ядер, то максимальное увеличение производительности будет достигнуто при выборе такого количества процессов.
|
|||
|
|
|||
|
Результаты:
|
|||
|
![RabbitMQ](screens/get5.png)
|
|||
|
|
|||
|
![MediaWiki](screens/get15.png)
|
|||
|
|
|||
|
Бенчмарк:
|
|||
|
![MediaWiki](screens/bench.png)
|
|||
|
|
|||
|
## Ссылка на видео
|