From c0d126982f68c52a28a29a20c11c7221cf94a4b6 Mon Sep 17 00:00:00 2001 From: EkaterinaR Date: Mon, 18 Nov 2024 10:50:25 +0400 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rogashova_ekaterina_lab_6/img.png | Bin 0 -> 46307 bytes rogashova_ekaterina_lab_6/maindet.py | 114 +++++++++++++++++++++++++++ rogashova_ekaterina_lab_6/readme.md | 17 ++++ 3 files changed, 131 insertions(+) create mode 100644 rogashova_ekaterina_lab_6/img.png create mode 100644 rogashova_ekaterina_lab_6/maindet.py create mode 100644 rogashova_ekaterina_lab_6/readme.md diff --git a/rogashova_ekaterina_lab_6/img.png b/rogashova_ekaterina_lab_6/img.png new file mode 100644 index 0000000000000000000000000000000000000000..da0681eade1feca7c4d396271f546c21fd53304d GIT binary patch literal 46307 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 CB abs(mat[max_row][i]): + max_row = k + + if abs(mat[max_row][i]) < 1e-9: + return 0 + + mat[[i, max_row]] = mat[[max_row, i]] + + for k in range(i + 1, n): + factor = mat[k][i] / mat[i][i] + for j in range(i, n): + mat[k][j] -= factor * mat[i][j] + + det = 1 + for i in range(n): + det *= mat[i][i] + return det + +def determinant_parallel_worker(matrix_part, row_indices): + n_part = len(matrix_part) + local_matrix = np.copy(matrix_part) + local_row_indices = np.copy(row_indices) + + for i in range(n_part): + max_row = i + for k in range(i + 1, n_part): + if abs(local_matrix[k][i]) > abs(local_matrix[max_row][i]): + max_row = k + + if abs(local_matrix[max_row][i]) < 1e-9: + return 0, local_row_indices + + local_matrix[[i, max_row]] = local_matrix[[max_row, i]] + local_row_indices[[i, max_row]] = local_row_indices[[max_row, i]] + + for k in range(i + 1, n_part): + factor = local_matrix[k][i] / local_matrix[i][i] + for j in range(i, n_part): + local_matrix[k][j] -= factor * local_matrix[i][j] + + det_part = 1 + for i in range(n_part): + det_part *= local_matrix[i][i] + return det_part, local_row_indices + + +def determinant_parallel(matrix, num_threads): + n = len(matrix) + if n == 1: + return matrix[0][0] + + if num_threads > n: + num_threads = n + + chunk_size = n // num_threads + + with multiprocessing.Pool(processes=num_threads) as pool: + results = [] + row_indices = np.arange(n) + for i in range(num_threads): + start_row = i * chunk_size + end_row = (i + 1) * chunk_size if i < num_threads - 1 else n + res = pool.apply_async(determinant_parallel_worker, + (matrix[start_row:end_row, :], row_indices[start_row:end_row])) + results.append(res) + + partial_dets = [] + for res in results: + det_part, row_indices_part = res.get() + partial_dets.append(det_part) + + + final_det = 1 + for det_part in partial_dets: + final_det *= det_part + + return final_det + + + +def calculate_determinant(matrix, num_threads): + if num_threads == 1: + return determinant_sequential(matrix) + else: + return determinant_parallel(matrix, num_threads) + + +if __name__ == '__main__': + sizes = [100, 300, 500] + num_threads_list = [1, 2, 4] + + for size in sizes: + matrix = np.random.rand(size, size) + for num_threads in num_threads_list: + start_time = time.time() + if num_threads == 1: + calculation_method = "Последовательный" + else: + calculation_method = f"Параллельный ({num_threads} потоков)" + det = calculate_determinant(matrix, num_threads) + end_time = time.time() + print( + f"Размер матрицы: {size}x{size}, Метод вычисления: {calculation_method}, Время: {end_time - start_time:.4f} сек.") diff --git a/rogashova_ekaterina_lab_6/readme.md b/rogashova_ekaterina_lab_6/readme.md new file mode 100644 index 0000000..308d692 --- /dev/null +++ b/rogashova_ekaterina_lab_6/readme.md @@ -0,0 +1,17 @@ +# Лабораторная работа №6 + +## Описание +Написана программа, которая вычисляет определитель квадратной матрицы двумя способами: +последовательно и параллельно, и сравнивает время их выполнения. + +Для каждой матрицы вычисляется детерминант с использованием различных количеств потоков (1, 2 и 4) и выводится время работы. + +## Вывод работы +Для матрицы 300x300 и 500x500 результаты показывают значительное преимущество параллельных вычислений. +Параллельные вычисления с 4 потоками значительно более эффективны, чем с 2 потоками для больших матриц (300x300 и 500x500). Это может указывать на то, что алгоритм выгодно распараллеливается, и использование большего числа потоков помогает снизить время исполнения. +Однако на малых матрицах (100x100) из-за высокой нагрузки на управление потоками производительность уменьшается (или не значительная). + +![img.png](img.png) + +## Видео +Работоспособность представлена на [видео](https://vk.com/video204968285_456240930). \ No newline at end of file -- 2.25.1