From 49095d84679bda90c1f5a6352b3e2fb553722761 Mon Sep 17 00:00:00 2001 From: acidmikk Date: Sat, 2 Dec 2023 01:49:01 +0400 Subject: [PATCH] basharin_sevastyan_lab_6 is ready --- basharin_sevastyan_lab_6/README.md | 25 ++++++++++++++++++ basharin_sevastyan_lab_6/main.py | 39 +++++++++++++++++++++++++++++ basharin_sevastyan_lab_6/res.png | Bin 0 -> 47317 bytes 3 files changed, 64 insertions(+) create mode 100644 basharin_sevastyan_lab_6/README.md create mode 100644 basharin_sevastyan_lab_6/main.py create mode 100644 basharin_sevastyan_lab_6/res.png diff --git a/basharin_sevastyan_lab_6/README.md b/basharin_sevastyan_lab_6/README.md new file mode 100644 index 0000000..adf7379 --- /dev/null +++ b/basharin_sevastyan_lab_6/README.md @@ -0,0 +1,25 @@ +## Лабораторная работа 6. Вариант 5. +### Задание +Реализовать нахождение детерминанта квадратной матрицы. + +### Как запустить +В терминале ввести команду `python main.py` из директории с файлом. + +### Описание работы ++ `determinant_block`: Эта функция принимает квадратный блок матрицы и вычисляет его детерминант с использованием +функции `np.linalg.det` из библиотеки **NumPy**. ++ `determinant_parallel`: Эта функция разбивает исходную матрицу на квадратные блоки, а затем +использует библиотеку `multiprocessing` для распараллеливания вычислений детерминантов блоков. Она создает пул +процессов, разбивает матрицу на блоки и передает каждый блок в пул процессов для параллельного вычисления детерминанта. +Затем результаты собираются и перемножаются для получения общего детерминанта матрицы. ++ В блоке `if __name__ == "__main__"`: создается случайная матрица заданного размера, и затем функция `determinant_parallel` +вызывается с разным числом процессов `num_processes`. Замеряется время выполнения для каждого размера матрицы и +каждого числа процессов. Также измеряется время выполнения для последовательного (однопоточного) расчета детерминанта +с использованием `determinant_block`. + +### Результат работы +![](res.png "") + +### Вывод +Из результатов работы видно, что написанный алгоритм не эффективен на приведенных размерах матрицы при различном +количестве потоков. Вероятнее всего на это влияет процесс разделение квадратной матрицы на меньшие блоки для вычисления. \ No newline at end of file diff --git a/basharin_sevastyan_lab_6/main.py b/basharin_sevastyan_lab_6/main.py new file mode 100644 index 0000000..c29b41a --- /dev/null +++ b/basharin_sevastyan_lab_6/main.py @@ -0,0 +1,39 @@ +import numpy as np +from multiprocessing import Pool +import time + + +def determinant_block(matrix_block): + return np.linalg.det(matrix_block) + + +def determinant_parallel(matrix, num_processes): + size = matrix.shape[0] + step = size // num_processes + + pool = Pool(processes=num_processes) + blocks = [] + for i in range(0, size, step): + blocks.append(matrix[i:i+step, i:i+step]) + + dets = pool.map(determinant_block, blocks) + return np.product(dets) + + +if __name__ == "__main__": + sizes = [100, 300, 500] + processes = [2, 4, 8] + + for size in sizes: + matrix = np.random.rand(size, size) + + for p in processes: + start = time.time() + det = determinant_parallel(matrix, p) + end = time.time() + print(f"{size}x{size} matrix with {p} processes took {end - start:.5f} secs") + + start = time.time() + det_seq = determinant_block(matrix) + end = time.time() + print(f"{size}x{size} matrix sequential took {end - start:.5f} secs") \ No newline at end of file diff --git a/basharin_sevastyan_lab_6/res.png b/basharin_sevastyan_lab_6/res.png new file mode 100644 index 0000000000000000000000000000000000000000..a211ec1cd4d3cfd55148c8daef43f8178f61f7ca GIT binary patch literal 47317 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%0D9sz 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 O>eACP(k#305dI%8rw6S7 literal 0 HcmV?d00001