.. | ||
main.py | ||
readme.md |
Кашин Максим ПИбд-42
Отчет по вычислению детерминанта матрицы
Описание
В данной лабораторной работе реализовано вычисление детерминанта квадратной матрицы двумя способами: последовательно и параллельно. Для параллельного вычисления используется библиотека multiprocessing
в Python. Программа позволяет задавать количество процессов, что позволяет наблюдать за изменением производительности при увеличении числа потоков.
Как работает код
-
Импорт библиотек:
numpy
используется для работы с матрицами и вычисления детерминанта.multiprocessing
позволяет создавать несколько процессов для параллельного вычисления.time
используется для замера времени выполнения.argparse
для обработки аргументов командной строки.
-
Функция
determinant_block(matrix_block)
:- Вычисляет детерминант переданного блока матрицы с помощью
numpy.linalg.det
.
- Вычисляет детерминант переданного блока матрицы с помощью
-
Функция
determinant_parallel(matrix, num_processes)
:- Делит исходную матрицу на блоки, каждый из которых передается в отдельный процесс для вычисления детерминанта.
- Возвращает произведение детерминантов блоков.
-
Функция
benchmark(size, num_processes)
:- Генерирует случайную матрицу заданного размера.
- Запускает параллельное и последовательное вычисление детерминанта, измеряя время выполнения и выводя результаты.
-
Основная часть программы:
- Использует
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 |
Выводы
-
Производительность: Параллельное вычисление показывает значительное замедление по сравнению с последовательным для малых матриц (например, 100x100). Это связано с накладными расходами на создание и управление процессами.
-
Эффективность: С увеличением размеров матриц (300x300 и 500x500) время параллельного вычисления увеличивается, что указывает на неэффективность при использовании большого количества процессов. В некоторых случаях, например, для матрицы 500x500 с 4 и 8 процессами, время выполнения параллельного алгоритма оказывается больше, чем у последовательного.
Запуск
Запустите программу с нужным числом процессов:
python main.py --processes <число процессов>