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

65 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа: Реализация умножения матриц
## Краткое описание
**Цель работы** разработать и сравнить последовательный и
параллельный алгоритмы умножения матриц, оценив их
производительность на матрицах больших размеров.
### Основные задачи:
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