[Л/Р 6] Казаков Евгений #122

Merged
v.moiseev merged 1 commits from EugeneKazakov/distributed-computing:kazakov-ev-lab6 into main 2023-12-20 23:14:29 +04:00
6 changed files with 91 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -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 параллельный алгоритм завершил быстрее чем, последовательный.

View File

@ -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)