distributed-computing/tasks/zinoveva-ad/lab_6/README.md
2023-12-18 21:12:13 +04:00

2.1 KiB
Raw Blame History

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

Выполнила студентка гр. ИСЭбд-41 Зиновьева А. Д.

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

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

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

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;
}

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

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, поскольку для матриц больших размеров детерминант вычисляется слишком долго.

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