From fb3994fcab6f75e5ff886b125e324e452f77d19f Mon Sep 17 00:00:00 2001 From: "evasina2312@gmail.com" Date: Fri, 13 Dec 2024 18:37:07 +0400 Subject: [PATCH] vasina_ekaterina_lab_6 is ready --- vasina_ekaterina_lab_6/README.md | 31 +++++++++++++++++++ vasina_ekaterina_lab_6/app.py | 50 +++++++++++++++++++++++++++++++ vasina_ekaterina_lab_6/lab_6.png | Bin 0 -> 32441 bytes 3 files changed, 81 insertions(+) create mode 100644 vasina_ekaterina_lab_6/README.md create mode 100644 vasina_ekaterina_lab_6/app.py create mode 100644 vasina_ekaterina_lab_6/lab_6.png diff --git a/vasina_ekaterina_lab_6/README.md b/vasina_ekaterina_lab_6/README.md new file mode 100644 index 0000000..e133d92 --- /dev/null +++ b/vasina_ekaterina_lab_6/README.md @@ -0,0 +1,31 @@ + Лабораторная работа 6. Определение детерминанта матрицы с помощью параллельных вычислений + +## Задание + +Требуется сделать два алгоритма: обычный и параллельный. В параллельном алгоритме предусмотреть ручное задание количества потоков, каждый из которых будет выполнять нахождение отдельной группы множителей. + + +### Описание работы программы + +Программа реализует вычисление детерминанта квадратной матрицы с использованием двух алгоритмов: *обычного и параллельного*. + +  1. Обычный алгоритм + +      Использует функцию ```numpy.linalg.det()``` для вычисления детерминанта. + +  2. Параллельный алгоритм + +      Разбивает матрицу на части и использует несколько потоков для параллельного вычисления детерминанта. Количество потоков задается вручную. Реализован с использованием библиотеки ```concurrent.futures```. + +Для каждого размера матрицы программа выводит полученные значения детерминантов и время выполнения обычного и параллельного алгоритмов. + +### Результат работы программы + +![](lab_6.png "") + +#### Вывод + +Параллельное выполнение нахождения детерминанта может привести к ускорению, особенно на больших матрицах. Однако, для некоторых матриц, результаты детерминантов могут отличаться между обычным и параллельным выполнением. + +# Видеозапись работы программы +https://vkvideo.ru/video174596752_456239399 \ No newline at end of file diff --git a/vasina_ekaterina_lab_6/app.py b/vasina_ekaterina_lab_6/app.py new file mode 100644 index 0000000..76905e0 --- /dev/null +++ b/vasina_ekaterina_lab_6/app.py @@ -0,0 +1,50 @@ +import numpy as np +import time +import concurrent.futures + +def calculate_determinant(matrix): + return np.linalg.det(matrix) + +def calculate_determinant_parallel(matrix, num_threads): + result = 1.0 + chunk_size = matrix.shape[0] // num_threads + + def calculate_chunk(start, end): + nonlocal result + for i in range(start, end): + result *= matrix[i, i] + + with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor: + futures = [] + for i in range(0, matrix.shape[0], chunk_size): + futures.append(executor.submit(calculate_chunk, i, i + chunk_size)) + + for future in concurrent.futures.as_completed(futures): + future.result() + + return result + +def benchmark(matrix_size, num_threads_list=[1, 2, 4]): + # Генерация квадратной матрицы + matrix = np.random.rand(matrix_size, matrix_size) + + # Бенчмарк для обычного нахождения детерминанта + start_time = time.time() + det_normal = calculate_determinant(matrix) + end_time = time.time() + print(f"Размер матрицы {matrix_size}x{matrix_size}") + print(f"Последовательный: Детерминант: {det_normal} Время выполнения: {end_time - start_time:.6f} секунд") + + # Бенчмарк для параллельного нахождения детерминанта + for num_threads in num_threads_list: + start_time = time.time() + det_parallel = calculate_determinant_parallel(matrix, num_threads) + end_time = time.time() + print(f"Параллельный ({num_threads} поток): Детерминант: {det_parallel} Время выполнения: {end_time - start_time:.6f} секунд") + + print() + +# Запуск бенчмарков +benchmark(100) +benchmark(300) +benchmark(500) diff --git a/vasina_ekaterina_lab_6/lab_6.png b/vasina_ekaterina_lab_6/lab_6.png new file mode 100644 index 0000000000000000000000000000000000000000..078fee4bab2478ecf06b965a3b1b4ee5ded2e5c3 GIT binary patch literal 32441 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⪻umc2><{MmKi1e8@WqIO5%1p4&3 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 z%0D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 literal 0 HcmV?d00001