DAS_2024_1/nikolaeva_yana_lab_5/README.md
2024-12-10 20:58:09 +04:00

63 lines
4.8 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. Сделать выводы о влиянии размеров матриц и количества потоков на производительность алгоритмов.
## Теоретическое обоснование
Умножение матриц — вычислительно сложная операция с асимптотической сложностью O(N³) для матриц размером N×N.
Для ускорения вычислений используется параллелизация, где каждая часть вычислений выполняется в отдельном потоке.
Однако эффективность параллельного подхода зависит от размеров задачи и числа потоков.
## Реализация
1. **Последовательный алгоритм**:
- Выполняет вычисления поэлементно для каждой строки первой матрицы и каждого столбца второй.
- Этот алгоритм не использует дополнительные ресурсы, кроме одного потока, и подходит для небольших задач.
2. **Параллельный алгоритм**:
- Делит строки первой матрицы на группы, каждая из которых обрабатывается в отдельном потоке.
- Реализован с использованием модуля `multiprocessing` для управления потоками.
- Число потоков задается вручную для возможности анализа производительности.
## Результаты тестирования
### Условия тестирования
- Размеры матриц: 100x100, 300x300, 500x500.
- Количество потоков: 1 (последовательное выполнение), 2, 4.
- Диапазон значений элементов матриц: от 0 до 200.
## Выводы
1. **Последовательный алгоритм**:
- Подходит для матриц небольшого размера (100x100), где накладные расходы на параллелизацию превышают выигрыши от многопоточности.
2. **Параллельный алгоритм**:
- Значительно ускоряет умножение матриц с увеличением их размера.
- Для матриц 500x500 ускорение в 22.5 раза при переходе от 1 потока к 4 потокам.
3. **Влияние числа потоков**:
- Оптимальное число потоков зависит от размера задачи и доступных ресурсов.
- Слишком большое количество потоков может привести к росту накладных расходов.
4. **Закономерности**:
- Накладные расходы на управление потоками минимальны для больших задач.
- Параллельные алгоритмы демонстрируют преимущество на задачах с высокой вычислительной сложностью.
## Заключение
Лабораторная работа подтвердила, что параллельные алгоритмы значительно эффективнее на больших данных.
Однако для небольших задач последовательный алгоритм остается предпочтительным из-за отсутствия накладных расходов.
В реальных приложениях важно учитывать баланс между размером задачи и доступными вычислительными ресурсами.
## Видео
https://cloud.mail.ru/public/fykM/jy3KEZBZM