23 lines
2.6 KiB
Markdown
23 lines
2.6 KiB
Markdown
|
# Лабораторная работа №5
|
|||
|
|
|||
|
## Описание
|
|||
|
Код реализует умножение квадратных матриц с использованием последовательного и параллельного подхода на основе библиотек numpy и multiprocessing.
|
|||
|
|
|||
|
Функция matrix_multiply(A, B) - выполняет умножение матриц
|
|||
|
|
|||
|
Функция worker(A, B, C, row_indices) - умножение матриц для определенного диапазона
|
|||
|
|
|||
|
Функция parallel_matrix_multiply(A, B, num_processes) - делит строки матрицы между процессами и создает процессы для выполнения функции worker, которая обрабатывает каждую партию строк
|
|||
|
|
|||
|
Функция benchmark(matrix_size, num_processes) - генерирует матрицы и выполняет параллельное умножение, вычисляя затраченное время.
|
|||
|
|
|||
|
## Вывод работы
|
|||
|
Этот код позволяет сравнивать производительность обычного и параллельного умножения матриц для разных размеров. Он помогает понять, как использование многопоточности может ускорить выполнение ресурсоемких операций, таких как умножение больших матриц.
|
|||
|
По получившемуся времени, можно заметить, что параллельное умножение больше подходит для больших матриц, чем для маленьких. Заметно большое уменьшение времени при параллельном вычислении в больших матрицах. В матрице 100*100 ускорения почти нет, чаще всего происходит такое, что при увеличении потоков - увеличивается время умножения.
|
|||
|
Это связано с тем, что система тратит время и ресурсы на создание и управление потоками.
|
|||
|
Для малых задач эти накладные расходы могут превышать преимущества, получаемые от параллельной обработки.
|
|||
|
|
|||
|
![img.png](img.png)
|
|||
|
|
|||
|
## Видео
|
|||
|
Работоспособность представлена на [видео](https://vk.com/video204968285_456240929).
|