Files
DAS_2025_1/kozyrev_sergey_lab_6
2025-10-22 19:46:49 +04:00
..
2025-10-22 19:46:49 +04:00
2025-10-22 19:46:49 +04:00

Лабораторная работа 6 — Параллельное вычисление детерминанта матрицы

1. Цель работы

Изучение параллельного программирования на примере реализации алгоритмов вычисления детерминанта (определителя) квадратных матриц с использованием многопроцессности Python.

2. Как запустить лабораторную работу

Предварительные требования:

  • Python 3.9+
  • Библиотека NumPy

Установка зависимостей

pip install numpy

Запуск программы

python matrix.py

Программа автоматически выполнит:

  1. Тесты корректности на известных матрицах
  2. Бенчмарки на матрицах размером 100×100, 300×300 и 500×500 элементов
  3. Сравнение последовательного и параллельного алгоритмов

3. Структура проекта

matrix.py     # Основной файл с реализацией алгоритмов
README.md                 # Документация проекта

4. Результаты тестирования

Матрицы 100×100

Результат:

Алгоритм Время (сек) Ускорение
Последовательный (LU) 0.01-0.03 1.00x
Параллельный (2 процесса) 2.5-3.5 0.01x
Параллельный (4 процесса) 1.8-2.8 0.01x
Параллельный (8 процессов) 1.5-2.5 0.01x

Вывод:

На матрицах 100×100 параллелизм крайне неэффективен. Overhead от создания процессов (2-3 сек) во много раз превышает время самих вычислений (0.01-0.03 сек). Последовательный LU-алгоритм работает мгновенно и является оптимальным выбором.

Матрицы 300×300

Результат:

Алгоритм Время (сек) Ускорение
Последовательный (LU) 0.15-0.25 1.00x
Параллельный (2 процесса) 45-55 0.004x
Параллельный (4 процесса) 25-35 0.007x
Параллельный (8 процессов) 15-20 0.01x

Вывод:

Даже на матрицах 300×300 параллелизм через разложение по строке остается неэффективным. LU-разложение работает за доли секунды, в то время как параллельное разложение требует десятков секунд на вычисление 300 миноров размером 299×299.

Матрицы 500×500

Результат:

Алгоритм Время (сек) Ускорение Детерминант
Последовательный (LU) 0.5-0.8 1.00x ~10¹⁰⁰⁰
Параллельный (2 процесса) 180-220 0.003x ~10¹⁰⁰⁰
Параллельный (4 процесса) 100-130 0.006x ~10¹⁰⁰⁰
Параллельный (8 процессов) 60-80 0.009x ~10¹⁰⁰⁰

Вывод:

На больших матрицах 500×500 ситуация не улучшается. LU-разложение остается самым эффективным (менее 1 секунды), в то время как параллельное разложение по строке требует минут работы.

13. Видео

ВидеоСсылка на видео работы алгоритма: Rutube