78 lines
7.8 KiB
Markdown
78 lines
7.8 KiB
Markdown
# Лабораторная работа №6
|
||
#### ПИбд-42. Минхасапов Руслан.
|
||
|
||
---
|
||
|
||
#### Выполнение
|
||
В работе реализованы два алгоритма вычисления определителя матрицы:
|
||
|
||
1. **Последовательный:** Рекурсивный алгоритм, основанный на разложении по первой строке.
|
||
2. **Параллельный:** Алгоритм, использующий `multiprocessing.Pool` для распределения вычислений между несколькими процессами. Каждый процесс вычисляет часть определителя, суммируя результаты которых получается окончательный определитель.
|
||
|
||
Для тестирования алгоритмов использовались квадратные матрицы различных размеров, заполненные случайными целыми числами. Производительность алгоритмов оценивалась по времени выполнения в миллисекундах.
|
||
|
||
---
|
||
|
||
#### Результаты бенчмарков:
|
||
|
||
Тесты проведены для матриц размером [2, 4, 6, 8, 10, 11, 12] с разным количеством процессов [2, 4, 8].
|
||
Большие размеры не использовались из-за высокой вычислительной сложности рекурсивного алгоритма. Результаты представлены в таблице:
|
||
|
||
| Размер | Метод | Кол-во процессов | Время (мс) | Детерминант |
|
||
|---|---|---|---|---|
|
||
| 2x2 | Последовательный | - | 0.0 | 42 |
|
||
| 2x2 | Параллельный | 2 | 128.10182571411133 | 42 |
|
||
| 2x2 | Параллельный | 4 | 115.54121971130371 | 42 |
|
||
| 2x2 | Параллельный | 8 | 162.1556282043457 | 42 |
|
||
| 4x4 | Последовательный | - | 0.0 | -306 |
|
||
| 4x4 | Параллельный | 2 | 93.99938583374023 | -306 |
|
||
| 4x4 | Параллельный | 4 | 115.57316780090332 | -306 |
|
||
| 4x4 | Параллельный | 8 | 163.00582885742188 | -306 |
|
||
| 6x6 | Последовательный | - | 0.0 | 10976 |
|
||
| 6x6 | Параллельный | 2 | 95.99781036376953 | 10976 |
|
||
| 6x6 | Параллельный | 4 | 118.65568161010742 | 10976 |
|
||
| 6x6 | Параллельный | 8 | 174.55458641052246 | 10976 |
|
||
| 8x8 | Последовательный | - | 31.999588012695312 | 600600 |
|
||
| 8x8 | Параллельный | 2 | 110.0003719329834 | 600600 |
|
||
| 8x8 | Параллельный | 4 | 140.5773162841797 | 600600 |
|
||
| 8x8 | Параллельный | 8 | 207.80611038208008 | 600600 |
|
||
| 10x10 | Последовательный | - | 2616.307020187378 | -226825156 |
|
||
| 10x10 | Параллельный | 2 | 1449.5408535003662 | -226825156 |
|
||
| 10x10 | Параллельный | 4 | 1156.5566062927246 | -226825156 |
|
||
| 10x10 | Параллельный | 8 | 1194.1299438476562 | -226825156 |
|
||
| 11x11 | Последовательный | - | 27917.847871780396 | 1673573946 |
|
||
| 11x11 | Параллельный | 2 | 16098.727703094482 | 1673573946 |
|
||
| 11x11 | Параллельный | 4 | 11074.35154914856 | 1673573946 |
|
||
| 11x11 | Параллельный | 8 | 10499.537706375122 | 1673573946 |
|
||
| 12x12 | Последовательный | - | 342880.4175853729 | -126767598056 |
|
||
| 12x12 | Параллельный | 2 | 196262.00246810913 | -126767598056 |
|
||
| 12x12 | Параллельный | 4 | 130018.41878890991 | -126767598056 |
|
||
| 12x12 | Параллельный | 8 | 119694.18478012085 | -126767598056 |
|
||
---
|
||
|
||
## Анализ
|
||
|
||
**1. Влияние размера матрицы:**
|
||
|
||
Как и ожидалось, время вычисления определителя резко возрастает с увеличением размера матрицы. Это связано с экспоненциальной сложностью рекурсивного алгоритма. Разница особенно заметна при переходе от матриц 10x10 к 11x11 и 12x12, где время вычисления увеличивается на порядок.
|
||
|
||
**2. Эффективность параллелизма:**
|
||
|
||
* **Малые матрицы (2x2, 4x4, 6x6):** Параллельное вычисление для малых матриц неэффективно. Время выполнения параллельного алгоритма значительно превышает время последовательного вычисления. Это объясняется накладными расходами на создание и управление процессами, которые в данном случае превышают выигрыш от распараллеливания.
|
||
|
||
* **Средние матрицы (8x8, 10x10):** Для матриц среднего размера начинает проявляться преимущество параллельного алгоритма. Например, для матрицы 10x10 использование 4 и 8 процессов сокращает время вычисления почти в два раза по сравнению с последовательным алгоритмом.
|
||
|
||
* **Большие матрицы (11x11, 12x12):** Для больших матриц эффективность параллелизма становится наиболее очевидной. Использование нескольких процессов существенно сокращает время вычисления. Например, для матрицы 12x12 использование 8 процессов уменьшает время вычисления более чем в 2.5 раза по сравнению с последовательным методом.
|
||
|
||
**3. Оптимальное количество процессов:**
|
||
|
||
Результаты показывают, что оптимальное количество процессов зависит от размера матрицы. Для больших матриц (11x11, 12x12) использование 4 или 8 процессов дает наилучшие результаты. Дальнейшее увеличение числа процессов может не давать значительного улучшения или даже привести к небольшому замедлению из-за накладных расходов на межпроцессное взаимодействие. Для меньших матриц оптимальным может быть меньшее число процессов, или даже последовательное выполнение.
|
||
|
||
**Вывод:**
|
||
|
||
Параллельное вычисление определителя матрицы эффективно для больших матриц, позволяя значительно сократить время вычисления. Однако для малых матриц накладные расходы на параллелизм могут перевесить преимущества. Выбор оптимального количества процессов зависит от размера матрицы и аппаратных ресурсов системы. В данном случае, для представленных размеров матриц, 4 или 8 процессов обеспечивают наилучшую производительность.
|
||
|
||
---
|
||
|
||
#### Демонстрация
|
||
Видео доступно по [ссылке](https://disk.yandex.ru/i/eJaYxGy2Jr_SFA) |