# Кашин Максим ПИбд-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)