DAS_2024_1/chernyshov_nikita_lab_6/README.md
Никита Чернышов 7f775233bf chernyshov_nikita_lab_6 is ready
2024-12-15 17:13:28 +04:00

36 lines
4.1 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.

# Лабораторная работа 6: Определение детерминанта матрицы с помощью параллельных вычислений
## Описание
В лабраторной работе программа вычисляет определитель матрицы двумя способами: параллельным методом с использованием нескольких процессов и последовательным методом, а также сравнивает их производительность. Функция determinant_block вычисляет детерминант переданного блока матрицы с помощью функции np.linalg.det из библиотеки NumPy. Функция determinant_parallel разделяет исходную матрицу на блоки (строго по строкам и столбцам) в зависимости от количества процессов, заданного аргументом num_processes. После этого каждый блок обрабатывается отдельным процессом в пуле процессов (Pool), и вычисленные детерминанты блоков перемножаются, чтобы получить общий детерминант матрицы. Функция benchmark генерирует случайную квадратную матрицу заданного размера, измеряет время выполнения параллельного и последовательного вычисления детерминанта, а затем выводит результаты. Основная часть программы запускается, если файл выполняется напрямую. Используется модуль argparse для получения аргумента командной строки --processes, который задает количество процессов для параллельного вычисления (по умолчанию 4). В цикле for функция benchmark выполняется для матриц размеров 100x100, 300x300 и 500x500, сравнивая производительность последовательного и параллельного подходов.
## Результаты
В процессе тестирования были получены следующие результаты:
### Скриншоты результатов
#### Результат бенчамарка при 1 процессе:
![img1.png](img1.png)
#### Результат бенчамарка при 2 процессах:
![img2.png](img2.png)
#### Результат бенчамарка при 3 процессах:
![img3.png](img3.png)
#### Результат бенчамарка при 4 процессах:
![img4.png](img4.png)
## Выводы
1. **Производительность**: Для небольших матриц (например, 100x100) параллельное вычисление демонстрирует замедление по сравнению с последовательным методом из-за накладных расходов на создание и управление процессами.
2. **Эффективность**: С увеличением размера матриц (300x300 и 500x500) время выполнения параллельного алгоритма также растёт, что свидетельствует о снижении его эффективности при использовании большего числа процессов. В некоторых тестах, например, для матрицы 500x500 при использовании 3 и 4 процессов, параллельный алгоритм оказался медленнее последовательного.
## Ссылка на видео
https://vkvideo.ru/video286865610_456239229?list=ln-59QwPscwM3KZRLxg1E