distributed-computing/tasks/plaksina-av/lab_6/README.md
2023-12-17 00:55:54 +04:00

79 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отчет по лабораторной работе №6
Выполнила студентка гр. ИСЭбд-41 Плаксина А.В.
# Описание работы приложения
Приложение реализовнао на языке питон, использована среда PyCharm для разработки.
Это консольное приложение, которое вычисляет детерминант матриц. Задается размерность матрицы, элементы генерируются рандомно (указываетя только диапазон их значений), количество
Код реализующий заполнение данных:
```cs
if __name__ == "__main__":
matrix_size = 10 # размер матрицы
lower_limit = 5 # числа в матрице от
upper_limit = 15 # и до
processes = [2, 4, 8, 16, 32]
#
# последовательное вычисление
sequential_determinant_calculation(matrix_size, lower_limit, upper_limit)
# параллельное вычисление
for i in processes:
print("Потоков " + str(i))
parallel_determinant_calculation(matrix_size, lower_limit, upper_limit, i)
```
Код реализующий последовательное вычисление детерминанта матриц:
```cs
def sequential_determinant_calculation(matrix_size, lower_limit, upper_limit):
random_matrix = generate_random_matrix(matrix_size, lower_limit, upper_limit)
start_time = time.time()
result = determinant(random_matrix)
end_time = time.time()
print(f"Последовательный детерминант: {result}")
print(f"Последовательное время: {end_time - start_time} секунд")
```
Код реализующий параллельное вычисление детерминанта матриц:
```cs
def parallel_determinant_calculation(matrix_size, lower_limit, upper_limit, num_processes):
random_matrix = generate_random_matrix(matrix_size, lower_limit, upper_limit)
matrices_to_process = [submatrix(random_matrix, 0, col) for col in range(matrix_size)]
start_time = time.time()
with Pool(processes=num_processes) as pool:
determinants = pool.map(determinant, matrices_to_process)
result = sum(((-1) ** col) * random_matrix[0][col] * det for col, det in enumerate(determinants))
end_time = time.time()
print(f"Параллельный детерминант: {result}")
print(f"Параллельное время: {end_time - start_time} секунд")
```
# Бенчмаркинг
Для матриц болших размеров детерминант вычисляется очень долгое время, поэтому для примера я взяла размерность матрица 10х10
Результаты бенчмаркинга для последовательного способа вычисления детерминанта матриц:
![](photo/ph32.jpg)
Результаты бенчмаркинга для параллельного способа вычисления детерминанта матриц с различным количеством потока:
![](photo/ph31.jpg)
# Вывод
Скорость обработки у параллельного способа значительно выше, чем у последовательного
При увеличении количества потоков время обработки сначала снижается, затем, по примеру, начиная с 16 потока, время опять увеличивается, так как потоков становится слишком много.