diff --git a/savenkov_alexander_lab_6/.idea/.gitignore b/savenkov_alexander_lab_6/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/savenkov_alexander_lab_6/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/savenkov_alexander_lab_6/.idea/discord.xml b/savenkov_alexander_lab_6/.idea/discord.xml
new file mode 100644
index 0000000..30bab2a
--- /dev/null
+++ b/savenkov_alexander_lab_6/.idea/discord.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_6/.idea/inspectionProfiles/profiles_settings.xml b/savenkov_alexander_lab_6/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/savenkov_alexander_lab_6/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_6/.idea/misc.xml b/savenkov_alexander_lab_6/.idea/misc.xml
new file mode 100644
index 0000000..4e6f3a1
--- /dev/null
+++ b/savenkov_alexander_lab_6/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_6/.idea/modules.xml b/savenkov_alexander_lab_6/.idea/modules.xml
new file mode 100644
index 0000000..592982c
--- /dev/null
+++ b/savenkov_alexander_lab_6/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_6/.idea/savenkov_alexander_lab_6.iml b/savenkov_alexander_lab_6/.idea/savenkov_alexander_lab_6.iml
new file mode 100644
index 0000000..74d515a
--- /dev/null
+++ b/savenkov_alexander_lab_6/.idea/savenkov_alexander_lab_6.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_6/README.md b/savenkov_alexander_lab_6/README.md
new file mode 100644
index 0000000..081d718
--- /dev/null
+++ b/savenkov_alexander_lab_6/README.md
@@ -0,0 +1,33 @@
+# Лабораторная работа №6 - Определение детерминанта матрицы с помощью параллельных вычислений
+
+Задание:
+
+Кратко: реализовать нахождение детерминанта квадратной матрицы. Что такое детерминант матрицы (или определитель) можно посмотреть по ссылке.
+
+Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 как раз и реализует задание со *), каждый из которых будет выполнять нахождение отдельной группы множителей.
+
+Сделать несколько бенчмарков последовательного и параллельного алгоритма поиска детерминанта матрицы размером 100x100, 300x300, 500x500 элементов. Отразить свои наблюдения в readme-отчете.
+
+
+
Код
+
+
+
+
Код
+
+
+
+
Код
+
+
+
+
Работа программы
+
+
+
+Вывод: Параллельный алгоритм намного бысрее и имеет место быть если либо в матрице используются огромные числа или сама матрица намного большей размерностью
+
+
+# Видео
+
+Видео с разбором лабораторной https://youtu.be/--PnevLHZ9k
diff --git a/savenkov_alexander_lab_6/app.py b/savenkov_alexander_lab_6/app.py
new file mode 100644
index 0000000..8d26bc6
--- /dev/null
+++ b/savenkov_alexander_lab_6/app.py
@@ -0,0 +1,69 @@
+import numpy as np
+import time
+from concurrent.futures import ThreadPoolExecutor
+
+def sequential_matrix_determinant(matrix):
+ """Выполняет последовательное вычисление детерминанта матрицы."""
+ return np.linalg.det(matrix)
+
+def parallel_matrix_determinant(matrix, num_threads=1):
+ """
+ Выполняет параллельное вычисление детерминанта матрицы с использованием заданного количества потоков.
+ Каждый поток обрабатывает свою часть вычислений.
+ """
+ rows, cols = matrix.shape
+ chunk_size = rows // num_threads
+
+ determinants = []
+
+ def calculate_determinant(start_row, end_row):
+ """Вычисление детерминанта для части матрицы."""
+ nonlocal determinants
+ submatrix = matrix[start_row:end_row, :]
+ # Убедимся, что submatrix является квадратной
+ submatrix_size = min(submatrix.shape)
+ determinant = np.linalg.det(submatrix[:submatrix_size, :submatrix_size])
+ determinants.append(determinant)
+
+ with ThreadPoolExecutor(max_workers=num_threads) as executor:
+ futures = []
+ for i in range(0, rows, chunk_size):
+ end_row = min(i + chunk_size, rows)
+ futures.append(executor.submit(calculate_determinant, i, end_row))
+
+ for future in futures:
+ future.result()
+
+ return determinants
+
+def benchmark(matrix_size, num_threads=1):
+ """
+ Измеряет время выполнения последовательного и параллельного вычисления детерминанта матриц
+ заданного размера с использованием заданного количества потоков.
+ """
+ matrix = np.random.randint(0, 10, size=(matrix_size, matrix_size))
+
+ # Замер времени для последовательного алгоритма
+ start_time = time.time()
+ sequential_result = sequential_matrix_determinant(matrix)
+ sequential_time = time.time() - start_time
+
+ # Замер времени для параллельного алгоритма
+ start_time = time.time()
+ parallel_result = parallel_matrix_determinant(matrix, num_threads)
+ parallel_time = time.time() - start_time
+
+ return sequential_time, parallel_time
+
+if __name__ == "__main__":
+ matrix_sizes = [100, 300, 500] # Для демонстрации используем небольшие матрицы
+ num_threads = int(input("Введите количество потоков: "))
+
+ for size in matrix_sizes:
+ print(f"Matrix size: {size}x{size}")
+ sequential_time, parallel_time = benchmark(size, num_threads)
+
+ print(f"Sequential algorithm time: {sequential_time:.6f} seconds")
+ print(f"Parallel algorithm time ({num_threads} threads): {parallel_time:.6f} seconds")
+
+ print("="*30)
diff --git a/savenkov_alexander_lab_6/screens/img1.png b/savenkov_alexander_lab_6/screens/img1.png
new file mode 100644
index 0000000..48835d8
Binary files /dev/null and b/savenkov_alexander_lab_6/screens/img1.png differ
diff --git a/savenkov_alexander_lab_6/screens/img2.png b/savenkov_alexander_lab_6/screens/img2.png
new file mode 100644
index 0000000..688cc15
Binary files /dev/null and b/savenkov_alexander_lab_6/screens/img2.png differ
diff --git a/savenkov_alexander_lab_6/screens/img3.png b/savenkov_alexander_lab_6/screens/img3.png
new file mode 100644
index 0000000..cc7cff6
Binary files /dev/null and b/savenkov_alexander_lab_6/screens/img3.png differ
diff --git a/savenkov_alexander_lab_6/screens/img4.png b/savenkov_alexander_lab_6/screens/img4.png
new file mode 100644
index 0000000..b1522c8
Binary files /dev/null and b/savenkov_alexander_lab_6/screens/img4.png differ