DAS_2024_1/kurushina_ksenia_lab_5/README.md
2024-12-09 19:55:48 +04:00

4.9 KiB
Raw Blame History

Лабораторная работа: Реализация умножения матриц

Краткое описание

Цель работы разработать и сравнить последовательный и параллельный алгоритмы умножения матриц, оценив их производительность на матрицах больших размеров.

Основные задачи:

  1. Реализовать алгоритм последовательного умножения матриц.
  2. Создать параллельный алгоритм с настраиваемым числом потоков.
  3. Провести бенчмарки обоих алгоритмов на матрицах размером 100x100, 300x300 и 500x500.
  4. Проанализировать результаты и определить влияние размера матрицы и количества потоков на производительность.

Теоретическая часть

Умножение матриц является ключевой операцией во многих областях, включая машинное обучение, обработку изображений и моделирование физических процессов. Сложность умножения двух матриц размером N x N составляет O(N³), что делает задачу вычислительно затратной. Для ускорения вычислений используется параллелизм, позволяющий распределить работу между несколькими потоками.

Описание реализации

  1. Последовательный алгоритм реализован в файле sequential.py. Каждый элемент результирующей матрицы вычисляется

  2. как сумма произведений соответствующих элементов

  3. строки первой матрицы и столбца второй.

  4. Параллельный алгоритм описан в модуле parallel.py.

  5. Для выполнения вычислений используется многопоточность: каждый поток обрабатывает отдельный блок

  6. строк результирующей матрицы. Пользователь может задать число потоков для регулирования нагрузки и эффективности работы.

Результаты экспериментов

Тесты проводились на матрицах следующих размеров: 100x100, 300x300 и 500x500. Для параллельного алгоритма изменялось число потоков, чтобы оценить их влияние на скорость вычислений.

Анализ результатов

  1. Эффективность параллелизма: Параллельный алгоритм показал прирост производительности для больших матриц. При размере 500x500 с 4 потоками наблюдалось значительное ускорение.

  2. Число потоков: Увеличение потоков улучшает производительность только до определённого момента. Для маленьких матриц (например, 100x100) дополнительная параллелизация может быть неэффективной.

  3. Ограничения параллелизма: Накладные расходы на управление потоками и их синхронизацию уменьшают преимущества многопоточности при малых объёмах данных.

  4. Рекомендации:

Параллельные алгоритмы наиболее эффективны при работе с большими матрицами. Настройка числа потоков должна учитывать ресурсы системы и размер задачи.

Заключение

Данная работа продемонстрировала эффективность параллельного умножения матриц на больших данных. Оптимизация параметров параллельного алгоритма позволяет значительно сократить время выполнения задач, связанных с вычислительной обработкой матриц.

Ссылка на видео

https://cloud.mail.ru/public/tKoW/ZLDNyHam2