# Отчет по лабораторной работе №6 Выполнила студентка гр. ИСЭбд-41 Зиновьева А. Д. ## Создание приложения Было выбрано консольное приложение, язык программирования - c#. Обычный алгоритм: ```cs static double CalculateDeterminantSequential(int[,] matrix) { int size = matrix.GetLength(0); double determinant = 0; if (size == 1) { determinant = matrix[0, 0]; } else if (size == 2) { determinant = matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]; } else { for (int j = 0; j < size; j++) { determinant += matrix[0, j] * CalculateMinor(matrix, 0, j) * Math.Pow(-1, j); } } return determinant; } ``` Параллельный алгоритм: ```cs static double CalculateDeterminantParallel(int[,] matrix, int threads) { int size = matrix.GetLength(0); double determinant = 0; if (size == 1) { determinant = matrix[0, 0]; } else if (size == 2) { determinant = matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]; } else { Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = threads }, j => { determinant += matrix[0, j] * CalculateMinor(matrix, 0, j) * Math.Pow(-1, j); }); } return determinant; } ``` ## Бенчмарки Для примера была взята матрица размерностью 10х10, поскольку для матриц больших размеров детерминант вычисляется слишком долго. ![](pic/pic1.jpg) ``Вывод``: Обычный (последовательный) алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных.