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