diff --git a/tasks/kazakov-ev/lab_6/1.png b/tasks/kazakov-ev/lab_6/1.png new file mode 100644 index 0000000..cded102 Binary files /dev/null and b/tasks/kazakov-ev/lab_6/1.png differ diff --git a/tasks/kazakov-ev/lab_6/2.png b/tasks/kazakov-ev/lab_6/2.png new file mode 100644 index 0000000..155b8d4 Binary files /dev/null and b/tasks/kazakov-ev/lab_6/2.png differ diff --git a/tasks/kazakov-ev/lab_6/3.png b/tasks/kazakov-ev/lab_6/3.png new file mode 100644 index 0000000..bc96e33 Binary files /dev/null and b/tasks/kazakov-ev/lab_6/3.png differ diff --git a/tasks/kazakov-ev/lab_6/4.png b/tasks/kazakov-ev/lab_6/4.png new file mode 100644 index 0000000..082479e Binary files /dev/null and b/tasks/kazakov-ev/lab_6/4.png differ diff --git a/tasks/kazakov-ev/lab_6/README.md b/tasks/kazakov-ev/lab_6/README.md new file mode 100644 index 0000000..58248ac --- /dev/null +++ b/tasks/kazakov-ev/lab_6/README.md @@ -0,0 +1,30 @@ +# Отчет по лабораторной работе №6 + +Выполнил студент гр. ИСЭбд-41 Казаков Е.В. + +## Создание приложения + +Выбрал язык Pythone. + +Приложение на вход получает кол-во поток, далее у нас происходит последовательный расчет детерминанта. После чего выводит всё в консоль + +![](1.png) + + +## Бенчмарки + +Протестируем обычный и параллельный алгоритм матрицах 100х100, 300х300 и 500х500. + +Матрицы 100х100 + +![](2.png) + +Матрицы 300х300 + +![](3.png) + +Матрицы 500х500 + +![](4.png) + +Вывод: Чем больше у нас кол-во данных, тем разница между параллельным и последовательных становится меньше Как видно из скриншотов для матрицы 500x500 параллельный алгоритм завершил быстрее чем, последовательный. \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_6/algo.py b/tasks/kazakov-ev/lab_6/algo.py new file mode 100644 index 0000000..435dfd7 --- /dev/null +++ b/tasks/kazakov-ev/lab_6/algo.py @@ -0,0 +1,61 @@ +import numpy as np +import time +from multiprocessing import Pool + +def determinant(matrix): + return np.linalg.det(matrix) + +def parallel_determinant(matrix, num_threads): + size = matrix.shape[0] + step = size // num_threads + pool = Pool(processes=num_threads) + blocks = [] + for i in range(0, size, step): + blocks.append(matrix[i:i+step, i:i+step]) + dets = pool.map(determinant, blocks) + return np.prod(dets) + +def benchmark(num_threads): + matrix1 = np.random.rand(100, 100) + start_time = time.time() + det1 = determinant(matrix1) + end_time = time.time() + execution_time = end_time - start_time + print("Матрица 100x100:", matrix1) + print("Детерминант матрицы 100x100:", det1) + print("Последовательное время выполнения:", execution_time, "сек") + start_time = time.time() + detp1 = parallel_determinant(matrix1, num_threads) + end_time = time.time() + execution_time = end_time - start_time + print("Пареллельное время выполнения:", execution_time, "сек") + matrix2 = np.random.rand(300, 300) + start_time = time.time() + det2 = determinant(matrix2) + end_time = time.time() + execution_time = end_time - start_time + print("Матрица 300x300:", matrix2) + print("Детерминант матрицы 300x300:", det2) + print("Последовательное время выполнения:", execution_time, "сек") + start_time = time.time() + detp2 = parallel_determinant(matrix2, num_threads) + end_time = time.time() + execution_time = end_time - start_time + print("Пареллельное время выполнения:", execution_time, "сек") + matrix3 = np.random.rand(500, 500) + det3 = determinant(matrix3) + end_time = time.time() + execution_time = end_time - start_time + print("Матрица 500x500:", matrix3) + print("Детерминант матрицы 500x500:", det3) + print("Последовательное время выполнения:", execution_time, "сек") + start_time = time.time() + detp3 = parallel_determinant(matrix3, num_threads) + end_time = time.time() + execution_time = end_time - start_time + print("Пареллельное время выполнения:", execution_time, "сек") + +if __name__ == "__main__": + print("Введите кол-во поток") + n = int(input()) + benchmark(n) \ No newline at end of file