distributed-computing/tasks/ostrovskaya-sf/lab_6
Софья Островская f75432d5f7 fix readme
2023-12-17 15:31:55 +04:00
..
lab_6_matrix . 2023-12-17 15:30:42 +04:00
pic . 2023-12-17 15:30:42 +04:00
README.md fix readme 2023-12-17 15:31:55 +04:00

Отчет по лабораторной работе №6

Выполнила студентка гр. ИСЭбд-41 Островская С. Ф.

Создание приложения

Было выбрано консольное приложение, язык программирования - c#.

Обычный алгоритм:

static void SequentialDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit)
    {
        int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit);

        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        int result = Determinant(randomMatrix);
        stopwatch.Stop();
        TimeSpan elapsedTime = stopwatch.Elapsed;
        Console.WriteLine($"Последовательный детерминант: {result}");
        Console.WriteLine($"Последовательное время: {elapsedTime.TotalSeconds:F7} секунд");
    }

Параллельный алгоритм:

static void ParallelDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit, int numProcesses)
    {
        int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit);

        int[][] matricesToProcess = new int[matrixSize][];
        for (int col = 0; col < matrixSize; col++)
        {
            matricesToProcess[col] = Submatrix(randomMatrix, 0, col)[0];
        }

        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        int[] determinants = new int[matrixSize];
        Parallel.For(0, matrixSize, new ParallelOptions { MaxDegreeOfParallelism = numProcesses }, col =>
        {
            determinants[col] = Determinant(new int[][] { matricesToProcess[col] });
        });

        int result = 0;
        for (int col = 0; col < matrixSize; col++)
        {
            result += ((-1) * col) * randomMatrix[0][col] * determinants[col];
        }
        stopwatch.Stop();
        TimeSpan elapsedTime = stopwatch.Elapsed;
        Console.WriteLine($"Параллельный детерминант: {result}");
        Console.WriteLine($"Параллельное время: {elapsedTime.TotalSeconds:F7} секунд");
    }

Бенчмарки

Для примера была взята матрица размерностью 10х10, поскольку для матриц больших размеров детерминант вычисляется слишком долго.

Вывод: Обыный алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных.