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

Лабораторная работа 6: Определение детерминанта матрицы с помощью параллельных вычислений

Описание

В лабраторной работе программа вычисляет определитель матрицы двумя способами: параллельным методом с использованием нескольких процессов и последовательным методом, а также сравнивает их производительность. Функция determinant_block вычисляет детерминант переданного блока матрицы с помощью функции np.linalg.det из библиотеки NumPy. Функция determinant_parallel разделяет исходную матрицу на блоки (строго по строкам и столбцам) в зависимости от количества процессов, заданного аргументом num_processes. После этого каждый блок обрабатывается отдельным процессом в пуле процессов (Pool), и вычисленные детерминанты блоков перемножаются, чтобы получить общий детерминант матрицы. Функция benchmark генерирует случайную квадратную матрицу заданного размера, измеряет время выполнения параллельного и последовательного вычисления детерминанта, а затем выводит результаты. Основная часть программы запускается, если файл выполняется напрямую. Используется модуль argparse для получения аргумента командной строки --processes, который задает количество процессов для параллельного вычисления (по умолчанию 4). В цикле for функция benchmark выполняется для матриц размеров 100x100, 300x300 и 500x500, сравнивая производительность последовательного и параллельного подходов.

Результаты

В процессе тестирования были получены следующие результаты:

Скриншоты результатов

Результат бенчамарка при 1 процессе:

img1.png

Результат бенчамарка при 2 процессах:

img2.png

Результат бенчамарка при 3 процессах:

img3.png

Результат бенчамарка при 4 процессах:

img4.png

Выводы

  1. Производительность: Для небольших матриц (например, 100x100) параллельное вычисление демонстрирует замедление по сравнению с последовательным методом из-за накладных расходов на создание и управление процессами.

  2. Эффективность: С увеличением размера матриц (300x300 и 500x500) время выполнения параллельного алгоритма также растёт, что свидетельствует о снижении его эффективности при использовании большего числа процессов. В некоторых тестах, например, для матрицы 500x500 при использовании 3 и 4 процессов, параллельный алгоритм оказался медленнее последовательного.

Ссылка на видео

https://vkvideo.ru/video286865610_456239229?list=ln-59QwPscwM3KZRLxg1E