.. | ||
img.png | ||
main.py | ||
README.md |
Лабораторная работа: Умножение матриц
Описание
Цель работы – реализовать последовательный и параллельный алгоритмы умножения матриц, а также сравнить их производительность на больших квадратных матрицах.
Задачи:
- Реализовать последовательный алгоритм умножения матриц.
- Реализовать параллельный алгоритм, позволяющий задавать количество потоков вручную.
- Провести тесты на матрицах размером 100x100, 300x300 и 500x500.
- Сделать выводы о влиянии размеров матриц и количества потоков на производительность алгоритмов.
Теоретическое обоснование
Умножение матриц — вычислительно сложная операция с асимптотической сложностью O(N³) для матриц размером N×N. Для ускорения вычислений используется параллелизация, где каждая часть вычислений выполняется в отдельном потоке. Однако эффективность параллельного подхода зависит от размеров задачи и числа потоков.
Реализация
-
Последовательный алгоритм:
- Выполняет вычисления поэлементно для каждой строки первой матрицы и каждого столбца второй.
- Этот алгоритм не использует дополнительные ресурсы, кроме одного потока, и подходит для небольших задач.
-
Параллельный алгоритм:
- Делит строки первой матрицы на группы, каждая из которых обрабатывается в отдельном потоке.
- Реализован с использованием модуля
multiprocessing
для управления потоками. - Число потоков задается вручную для возможности анализа производительности.
Результаты тестирования
Условия тестирования
- Размеры матриц: 100x100, 300x300, 500x500.
- Количество потоков: 1 (последовательное выполнение), 2, 4.
- Диапазон значений элементов матриц: от 0 до 200.
Выводы
-
Последовательный алгоритм:
- Подходит для матриц небольшого размера (100x100), где накладные расходы на параллелизацию превышают выигрыши от многопоточности.
-
Параллельный алгоритм:
- Значительно ускоряет умножение матриц с увеличением их размера.
- Для матриц 500x500 ускорение в 2–2.5 раза при переходе от 1 потока к 4 потокам.
-
Влияние числа потоков:
- Оптимальное число потоков зависит от размера задачи и доступных ресурсов.
- Слишком большое количество потоков может привести к росту накладных расходов.
-
Закономерности:
- Накладные расходы на управление потоками минимальны для больших задач.
- Параллельные алгоритмы демонстрируют преимущество на задачах с высокой вычислительной сложностью.
Заключение
Лабораторная работа подтвердила, что параллельные алгоритмы значительно эффективнее на больших данных. Однако для небольших задач последовательный алгоритм остается предпочтительным из-за отсутствия накладных расходов. В реальных приложениях важно учитывать баланс между размером задачи и доступными вычислительными ресурсами.