# Лабораторная работа: Реализация умножения матриц ## Краткое описание **Цель работы** – разработать и сравнить последовательный и параллельный алгоритмы умножения матриц, оценив их производительность на матрицах больших размеров. ### Основные задачи: 1. Реализовать алгоритм последовательного умножения матриц. 2. Создать параллельный алгоритм с настраиваемым числом потоков. 3. Провести бенчмарки обоих алгоритмов на матрицах размером 100x100, 300x300 и 500x500. 4. Проанализировать результаты и определить влияние размера матрицы и количества потоков на производительность. ## Теоретическая часть Умножение матриц является ключевой операцией во многих областях, включая машинное обучение, обработку изображений и моделирование физических процессов. Сложность умножения двух матриц размером `N x N` составляет O(N³), что делает задачу вычислительно затратной. Для ускорения вычислений используется параллелизм, позволяющий распределить работу между несколькими потоками. ## Описание реализации 1. **Последовательный алгоритм** реализован в файле `sequential.py`. Каждый элемент результирующей матрицы вычисляется 2. как сумма произведений соответствующих элементов 3. строки первой матрицы и столбца второй. 2. **Параллельный алгоритм** описан в модуле `parallel.py`. 3. Для выполнения вычислений используется многопоточность: каждый поток обрабатывает отдельный блок 4. строк результирующей матрицы. Пользователь может задать число потоков для регулирования нагрузки и эффективности работы. ## Результаты экспериментов Тесты проводились на матрицах следующих размеров: 100x100, 300x300 и 500x500. Для параллельного алгоритма изменялось число потоков, чтобы оценить их влияние на скорость вычислений. ## Анализ результатов 1. **Эффективность параллелизма**: Параллельный алгоритм показал прирост производительности для больших матриц. При размере 500x500 с 4 потоками наблюдалось значительное ускорение. 2. **Число потоков**: Увеличение потоков улучшает производительность только до определённого момента. Для маленьких матриц (например, 100x100) дополнительная параллелизация может быть неэффективной. 3. **Ограничения параллелизма**: Накладные расходы на управление потоками и их синхронизацию уменьшают преимущества многопоточности при малых объёмах данных. 4. **Рекомендации**: Параллельные алгоритмы наиболее эффективны при работе с большими матрицами. Настройка числа потоков должна учитывать ресурсы системы и размер задачи. ## Заключение Данная работа продемонстрировала эффективность параллельного умножения матриц на больших данных. Оптимизация параметров параллельного алгоритма позволяет значительно сократить время выполнения задач, связанных с вычислительной обработкой матриц. ## Ссылка на видео https://cloud.mail.ru/public/tKoW/ZLDNyHam2