From e0a2b5991a0c742d43e099b0eff244a4b7780455 Mon Sep 17 00:00:00 2001 From: ttartt Date: Sun, 17 Nov 2024 21:26:10 +0400 Subject: [PATCH] artamonova_tatyana_lab_6 is ready --- artamonova_tatyana_lab_6/README.md | 50 +++++++++++++++++ artamonova_tatyana_lab_6/images/result.png | Bin 0 -> 81144 bytes artamonova_tatyana_lab_6/main.py | 62 +++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 artamonova_tatyana_lab_6/README.md create mode 100644 artamonova_tatyana_lab_6/images/result.png create mode 100644 artamonova_tatyana_lab_6/main.py diff --git a/artamonova_tatyana_lab_6/README.md b/artamonova_tatyana_lab_6/README.md new file mode 100644 index 0000000..c679226 --- /dev/null +++ b/artamonova_tatyana_lab_6/README.md @@ -0,0 +1,50 @@ +# Лабораторная работа №6 ПИбд-42 Артамоновой Татьяны + +## Цель работы + +Разработать и сравнить эффективность последовательного и +параллельного алгоритмов вычисления определителя квадратной матрицы. + +## Методика + +Для вычисления определителя использовался рекурсивный алгоритм, основанный +на разложении по первой строке. Параллельная версия алгоритма реализована +с помощью библиотеки multiprocessing, разделяя вычисление алгебраических +дополнений между несколькими процессами. Время выполнения каждого алгоритма +замерялось для матриц различных размеров (100x100, 300x300, 500x500). +Эксперименты проводились с различным количеством потоков (1, 2, 4). + +## Результаты + +Результаты бенчмарка представлены на изображении: +[Фото](images/result.png) + +## Анализ результатов + +Результаты демонстрируют неоднозначную эффективность параллельного подхода. +Для матрицы 100x100 параллельные версии работают медленнее, чем последовательная. +Это объясняется значительными накладными расходами на создание и синхронизацию +процессов, которые преобладают над выигрышем от распараллеливания для небольших +задач. + +Для матриц 300x300 и 500x500 наблюдается неожиданное поведение: параллельные +версии работают значительно медленнее, чем последовательная. Это указывает на +наличие проблем в реализации параллельного алгоритма. Скорее всего, проблема +связана с неэффективным использованием multiprocessing и значительными накладными +расходами на межпроцессное взаимодействие, которые перевешивают выигрыш от +распараллеливания. Рекурсивный алгоритм вычисления детерминанта плохо +масштабируется при распараллеливании, так как большая часть времени тратится +на рекурсивные вызовы, которые не могут быть эффективно распределены между +процессами. + +## Выводы + +Полученные результаты показывают, что для выбранного рекурсивного +алгоритма и способа распараллеливания, параллельная реализация не эффективна. +Для эффективного использования параллельных вычислений необходимы более +подходящие алгоритмы вычисления определителя, например, алгоритмы, основанные +на LU-разложении, а также более тщательная оптимизация распараллеливания с +учетом накладных расходов. В данном случае, последовательный алгоритм оказался +быстрее для всех размеров матриц, кроме 100х100, где разница незначительна. + +### [Видео](https://vk.com/video212084908_456239363) \ No newline at end of file diff --git a/artamonova_tatyana_lab_6/images/result.png b/artamonova_tatyana_lab_6/images/result.png new file mode 100644 index 0000000000000000000000000000000000000000..30263c3b450383e7d78283787dc4fe1cd26d859f GIT binary patch literal 81144 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 M+9GToT6^92AK0wS8UO$Q literal 0 HcmV?d00001 diff --git a/artamonova_tatyana_lab_6/main.py b/artamonova_tatyana_lab_6/main.py new file mode 100644 index 0000000..0abe40b --- /dev/null +++ b/artamonova_tatyana_lab_6/main.py @@ -0,0 +1,62 @@ +import numpy as np +import time +import threading + +def determinant_sequential(matrix): + return np.linalg.det(matrix) + +def determinant_parallel(matrix, num_threads): + n = len(matrix) + if n == 1: + return matrix[0][0] + if n == 2: + return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0] + + threads = [] + results = [0] * num_threads + chunk_size = n // num_threads + + def worker(thread_id): + start_index = thread_id * chunk_size + end_index = min((thread_id + 1) * chunk_size, n) + det_sum = 0 + for i in range(start_index, end_index): + submatrix = np.delete(matrix, i, 0) + submatrix = np.delete(submatrix, 0, 1) + det_sum += (-1)**i * matrix[i][0] * determinant_sequential(submatrix) + results[thread_id] = det_sum + + for i in range(num_threads): + thread = threading.Thread(target=worker, args=(i,)) + threads.append(thread) + thread.start() + + for thread in threads: + thread.join() + + return sum(results) + +sizes = [100, 300, 500] +num_threads = [1, 2, 4] + +results = {} + +for size in sizes: + matrix = np.random.rand(size, size) + results[size] = {} + for n_threads in num_threads: + start_time = time.time() + if n_threads == 1: + det = determinant_sequential(matrix) + else: + det = determinant_parallel(matrix, n_threads) + end_time = time.time() + results[size][n_threads] = end_time - start_time + print(f"Размер матрицы: {size}x{size}, Потоков: {n_threads}, Время: {end_time - start_time:.4f} сек.") + + +print("\n## Результаты бенчмарка:") +print("| Размер матрицы | 1 поток (последовательно) | 2 потока | 4 потока |") +for size, timings in results.items(): + print(f"| {size}x{size} | {timings [1] :.4f} сек. | {timings.get(2, 'N/A'):.4f} сек. | {timings.get(4, 'N/A'):.4f} сек. |") + -- 2.25.1