DAS_2024_1/presnyakova_victoria_lab_6/readme.md
2024-11-18 18:50:31 +04:00

3.6 KiB
Raw Blame History

Лабораторная работа 6.

Задание

Реализовать нахождение детерминанта квадратной матрицы.

Как запустить

В терминале ввести команду python main.py из директории с файлом.

Описание работы

####Функция determinant_block: Принимает на вход блок матрицы и вычисляет его определитель с помощью np.linalg.det.

####Функция determinant_parallel: Делит входную матрицу на блоки по диагонали (размер блоков определяется количеством процессов). Использует multiprocessing.Pool для параллельного вычисления определителей этих блоков. Вычисленные определители перемножаются для получения общего определителя матрицы. Это приближение.

####Основной код (if name == "main"): Создает случайные квадратные матрицы размером 100x100, 300x300 и 500x500. Для каждой матрицы сравнивает время вычисления определителя: Параллельно: с использованием 2, 4 и 8 процессов. Последовательно: вызов determinant_block для всей матрицы

Результат работы

100x100 matrix with 2 processes took 0.20610 secs

100x100 matrix with 4 processes took 0.23741 secs

100x100 matrix with 8 processes took 0.29459 secs

100x100 matrix sequential took 0.02152 secs

300x300 matrix with 2 processes took 1.13662 secs

300x300 matrix with 4 processes took 0.22154 secs

300x300 matrix with 8 processes took 0.30495 secs

300x300 matrix sequential took 0.26311 secs

500x500 matrix with 2 processes took 1.51184 secs

500x500 matrix with 4 processes took 3.05409 secs

500x500 matrix with 8 processes took 0.39279 secs

500x500 matrix sequential took 0.28332 secs

Вывод

####Проблема производительности:

Для малых матриц (100x100) последовательное вычисление работает намного быстрее, чем параллельное. Это связано с накладными расходами на создание процессов и управление их взаимодействием. Например, для 100x100 последовательное вычисление занимает 0.02152 сек, тогда как параллельное с 8 процессами — 0.29459 сек.

Для больших матриц (300x300, 500x500): Параллельное выполнение с увеличением числа процессов не показывает стабильного ускорения. Это может быть связано с неэффективным делением матрицы на блоки или накладными расходами на коммуникацию между процессами. Например, для 300x300 с 4 процессами время составляет 0.22154 сек, что лучше, чем последовательное (0.26311 сек). Однако при 2 или 8 процессах производительность хуже.

#Ссылка на видео: https://drive.google.com/file/d/1_h8chcro35oqFTaxSzCNjCIfacYDH9w0/view?usp=drive_link