31 lines
2.5 KiB
Markdown
31 lines
2.5 KiB
Markdown
|
# Лабораторная работа №5 - Параллельное умножение матриц
|
|||
|
|
|||
|
## Задание
|
|||
|
|
|||
|
|
|||
|
* Кратко: реализовать умножение двух больших квадратных матриц.
|
|||
|
|
|||
|
* Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 как раз и реализует задание со *), каждый из которых будет выполнять умножение элементов матрицы в рамках своей зоны ответственности.
|
|||
|
|
|||
|
## Работа программы:
|
|||
|
|
|||
|
1. Генерируются случайные матрицы A и B заданных размеров.
|
|||
|
|
|||
|
2. multiply_matrices_sequential(A, B) умножает две матрицы A и B последовательно, используя вложенные циклы для вычисления элементов результирующей матрицы C.
|
|||
|
|
|||
|
3. multiply_matrices_parallel(A, B, num_workers) выполняет параллельное умножение матриц с использованием пула процессов.
|
|||
|
|
|||
|
4. benchmark(matrix_size, num_workers) Измеряет время выполнения операций умножения. И выводит результат в консоль.
|
|||
|
|
|||
|
### Результат:
|
|||
|
|
|||
|
![](result.jpg "")
|
|||
|
|
|||
|
### Вывод:
|
|||
|
|
|||
|
При работе с большими матрицами параллельная обработка обычно оказывается эффективнее последовательной благодаря распределению вычислительной нагрузки между несколькими процессорами. Однако при обработке малых матриц затраты на организацию и управление параллельными потоками могут превысить выигрыш от их использования, и тогда последовательная обработка окажется быстрее.
|
|||
|
|
|||
|
|
|||
|
# Видео
|
|||
|
https://disk.yandex.ru/i/MUL1RGOHfue8wQ
|