DAS_2024_1/kashin_maxim_lab_6/readme.md
2024-10-27 20:01:01 +04:00

72 lines
5.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.

# Кашин Максим ПИбд-42
# Отчет по вычислению детерминанта матрицы
## Описание
В данной лабораторной работе реализовано вычисление детерминанта квадратной матрицы двумя способами: последовательно и параллельно. Для параллельного вычисления используется библиотека `multiprocessing` в Python. Программа позволяет задавать количество процессов, что позволяет наблюдать за изменением производительности при увеличении числа потоков.
## Как работает код
1. **Импорт библиотек**:
- `numpy` используется для работы с матрицами и вычисления детерминанта.
- `multiprocessing` позволяет создавать несколько процессов для параллельного вычисления.
- `time` используется для замера времени выполнения.
- `argparse` для обработки аргументов командной строки.
2. **Функция `determinant_block(matrix_block)`**:
- Вычисляет детерминант переданного блока матрицы с помощью `numpy.linalg.det`.
3. **Функция `determinant_parallel(matrix, num_processes)`**:
- Делит исходную матрицу на блоки, каждый из которых передается в отдельный процесс для вычисления детерминанта.
- Возвращает произведение детерминантов блоков.
4. **Функция `benchmark(size, num_processes)`**:
- Генерирует случайную матрицу заданного размера.
- Запускает параллельное и последовательное вычисление детерминанта, измеряя время выполнения и выводя результаты.
5. **Основная часть программы**:
- Использует `argparse` для получения количества процессов.
- Запускает бенчмарки для матриц размером 100x100, 300x300 и 500x500.
## Результаты
В процессе тестирования были получены следующие результаты:
### Сравнение времени выполнения:
| Размер матрицы | Количество процессов | Время (сек. параллельно) | Время (сек. последовательно) |
|----------------|----------------------|---------------------------|-------------------------------|
| 100x100 | 1 | 0.52331 | 0.04900 |
| 300x300 | 1 | 0.51905 | 0.00700 |
| 500x500 | 1 | 0.53077 | 0.01000 |
| 100x100 | 2 | 0.49886 | 0.00299 |
| 300x300 | 2 | 0.87159 | 0.00799 |
| 500x500 | 2 | 1.25856 | 0.01200 |
| 100x100 | 4 | 0.59433 | 0.00152 |
| 300x300 | 4 | 0.56344 | 0.00700 |
| 500x500 | 4 | 1.51391 | 0.01600 |
| 100x100 | 8 | 0.87769 | 0.00200 |
| 300x300 | 8 | 0.80332 | 0.00600 |
| 500x500 | 8 | 0.81058 | 0.01700 |
| 100x100 | 16 | 1.58553 | 0.00300 |
| 300x300 | 16 | 1.44331 | 0.00900 |
| 500x500 | 16 | 1.48519 | 0.06000 |
## Выводы
1. **Производительность**: Параллельное вычисление показывает значительное замедление по сравнению с последовательным для малых матриц (например, 100x100). Это связано с накладными расходами на создание и управление процессами.
2. **Эффективность**: С увеличением размеров матриц (300x300 и 500x500) время параллельного вычисления увеличивается, что указывает на неэффективность при использовании большого количества процессов. В некоторых случаях, например, для матрицы 500x500 с 4 и 8 процессами, время выполнения параллельного алгоритма оказывается больше, чем у последовательного.
## Запуск
Запустите программу с нужным числом процессов:
```
python main.py --processes <число процессов>
```
## Ссылка на видео
[Видео-отчёт Кашин Максим ПИбд-42](https://disk.yandex.ru/i/0zlwA89Pk_5dXQ)