3.3 KiB
3.3 KiB
Лабораторная работа №6
ПИбд-42. Мочалов Данила.
Выполнение
Реализованы два алгоритма вычисления определителя квадратной матрицы: обычный (рекурсивный) и параллельный. Параллельный алгоритм использует multiprocessing.Pool для разделения вычислений миноров между несколькими процессами.
Результаты бенчмарков:
Тесты проведены для матриц размером 9x9, 10x10 и 11x11 с разным количеством процессов (1, 2, 4). Большие размеры не использовались из-за высокой вычислительной сложности рекурсивного алгоритма. Результаты представлены в таблице:
Размер матрицы | Алгоритм | Кол-во процессов | Время (сек.) |
---|---|---|---|
9x9 | Обычный | - | 0.24 |
9x9 | Параллельный | 1 | 0.39 |
9x9 | Параллельный | 2 | 0.25 |
9x9 | Параллельный | 4 | 0.20 |
10x10 | Обычный | - | 2.37 |
10x10 | Параллельный | 1 | 2.47 |
10x10 | Параллельный | 2 | 1.42 |
10x10 | Параллельный | 4 | 0.85 |
11x11 | Обычный | - | 26.02 |
11x11 | Параллельный | 1 | 25.90 |
11x11 | Параллельный | 2 | 14.15 |
11x11 | Параллельный | 4 | 7.21 |
Анализ
- Рекурсивный алгоритм имеет экспоненциальную сложность, что делает его очень медленным для матриц больших размеров.
- Параллельный алгоритм с одним процессом работает примерно с той же скоростью (или чуть медленнее), что и последовательный, из-за накладных расходов на создание и управление процессами.
- С увеличением размера матрицы и количества процессов эффективность параллельного алгоритма возрастает. Наиболее заметное ускорение достигается при использовании 4 процессов для матрицы 11x11.
- Для маленьких матриц параллелизм может быть неэффективен из-за накладных расходов.
Демонстрация
Доступна по ссылке