diff --git a/antonov_dmitry_lab_6/README.md b/antonov_dmitry_lab_6/README.md new file mode 100644 index 0000000..475144e --- /dev/null +++ b/antonov_dmitry_lab_6/README.md @@ -0,0 +1,70 @@ +# Лабораторная работа №6 - Определение детерминанта матрицы с помощью параллельных вычислений + +Изучение параллельного вычисления дискриминанта + +# Задачи + +Кратко: реализовать нахождение детерминанта квадратной матрицы. + +Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный +(задание со * - реализовать это в рамках одного алгоритма). +В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 +как раз и реализует задание со *), каждый из которых будет выполнять нахождение отдельной +группы множителей. + +Сделать несколько бенчмарков последовательного и параллельного алгоритма поиска детерминанта +матрицы размером 100x100, 300x300, 500x500 элементов. +# Запуск + +Проект запускается в ide просто по нажатию у питон файла на функцию мейн. +Нужно последовательно запустить функцию мейн у файлов parallel_determ.py. + +# Описание работы: + +Приложение представляет собой консольное приложение для вычисления детерминанта +рандомной матрицы с числами определенного диапазона и размера матрицы. +В программе предусмотрена возможность задания количества процессов для распараллеливания. +Используется библиотека python multiprocessing. + +На рис 3 видно, что с использованием параллельного алгоритма скорость обработки увеличивается довольно +существенно. Но оптимальная скорость достигается при кол-ве потоков = кол-ву потоков процессора +У меня их 8. + +

+

Вводим значения в скрипт
+ +

+

+

Параллельное умножение в коде
+ +

+

+

Сравнение бенчмарков
+ +

+ +* Размер матрицы для эксперимента 10*10 +* Потоков 1 +* Параллельный детерминант: 195955762.2581097 +* Параллельное время: 5.735873222351074 секунд +* Потоков 2 +* Параллельный детерминант: 4409801072.873513 +* Параллельное время: 3.585620164871216 секунд +* Потоков 4 +* Параллельный детерминант: -219763547.41593504 +* Параллельное время: 2.174274206161499 секунд +* Потоков 8 +* Параллельный детерминант: 2067674869.5092595 +* Параллельное время: 1.8252685070037842 секунд +* Потоков 16 +* Параллельный детерминант: 653887070.4597099 +* Параллельное время: 1.887946605682373 секунд +* Потоков 32 +* Параллельный детерминант: 802268193.971918 +* Параллельное время: 3.3444454669952393 секунд + + + +# Ссылка на видео +https://disk.yandex.ru/i/PMBcmHiqJEjAcg + diff --git a/antonov_dmitry_lab_6/parallel_determ.py b/antonov_dmitry_lab_6/parallel_determ.py index 7e973c6..9b18cc9 100644 --- a/antonov_dmitry_lab_6/parallel_determ.py +++ b/antonov_dmitry_lab_6/parallel_determ.py @@ -57,14 +57,16 @@ def parallel_determinant_calculation(matrix_size, lower_limit, upper_limit, num_ if __name__ == "__main__": - matrix_size = 10 # размер матрицы + matrix_size = 20 # размер матрицы lower_limit = 10 # числа в матрице от - upper_limit = 1000 # и до - num_processes = 8 # число потоков - - # последовательное вычисление - sequential_determinant_calculation(matrix_size, lower_limit, upper_limit) + upper_limit = 20 # и до + processes = [1, 2, 4, 8, 16, 32] + # + # # последовательное вычисление + # sequential_determinant_calculation(matrix_size, lower_limit, upper_limit) # параллельное вычисление - parallel_determinant_calculation(matrix_size, lower_limit, upper_limit, num_processes) + for i in processes: + print("Потоков " + str(i)) + parallel_determinant_calculation(matrix_size, lower_limit, upper_limit, i) diff --git a/antonov_dmitry_lab_6/screens/img.png b/antonov_dmitry_lab_6/screens/img.png new file mode 100644 index 0000000..075a416 Binary files /dev/null and b/antonov_dmitry_lab_6/screens/img.png differ diff --git a/antonov_dmitry_lab_6/screens/img_1.png b/antonov_dmitry_lab_6/screens/img_1.png new file mode 100644 index 0000000..5c235bc Binary files /dev/null and b/antonov_dmitry_lab_6/screens/img_1.png differ diff --git a/antonov_dmitry_lab_6/screens/img_2.png b/antonov_dmitry_lab_6/screens/img_2.png new file mode 100644 index 0000000..cc5e425 Binary files /dev/null and b/antonov_dmitry_lab_6/screens/img_2.png differ