DAS_2024_1/kashin_maxim_lab_6
2024-10-27 20:01:01 +04:00
..
main.py Готово 2024-10-27 20:01:01 +04:00
readme.md Готово 2024-10-27 20:01:01 +04:00

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