distributed-computing/tasks/zinoveva-ad/lab_5/README.md
2023-12-18 18:15:41 +04:00

2.3 KiB
Raw Permalink Blame History

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

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

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

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

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

static int[,] MultiplyMatrices(int[,] matrixA, int[,] matrixB, int size)
{
    int[,] result = new int[size, size];
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            result[i, j] = 0;
            for (int k = 0; k < size; k++)
            {
                result[i, j] += matrixA[i, k] * matrixB[k, j];
            }
        }
    }
    return result;
}

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

static int[,] ParallelMultiplyMatrices(int[,] matrixA, int[,] matrixB, int size, int threads)
{
    int[,] result = new int[size, size];
    Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = threads }, i =>
    {
        for (int j = 0; j < size; j++)
        {
            result[i, j] = 0;
            for (int k = 0; k < size; k++)
            {
                result[i, j] += matrixA[i, k] * matrixB[k, j];
            }
        }
    });
    return result;
}

В результате обычный алгоритм выполнился за 0,0003575 секунды, а паралелльный за 0,0193432 секунды.

Бенчмарки

Протестируем обычный и параллельный алгоритмы на матрицах различных размеров: 100х100, 300х300 и 500х500.

Количество потоков: 4

Количество потоков: 12

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