distributed-computing/tasks/ostrovskaya-sf/lab_5
Софья Островская bc1845c05d .
2023-12-17 14:10:19 +04:00
..
lab_5_matrix . 2023-12-17 14:10:19 +04:00
pic laba done 2023-12-17 13:37:17 +04:00
.gitignore gitignore 2023-12-17 13:50:01 +04:00
README.md laba done 2023-12-17 13:37:17 +04:00

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

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

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

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

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

static int[][] MultiplyMatrix(int[][] matrix1, int[][] matrix2)
{
    int rows = matrix1.Length;
    int columns = matrix2[0].Length;
    int[][] result = new int[rows][];
    for (int i = 0; i < rows; i++)
    {
        result[i] = new int[columns];
        for (int j = 0; j < columns; j++)
        {
            result[i][j] = 0;
            for (int k = 0; k < matrix1[i].Length; k++)
            {
                result[i][j] += matrix1[i][k] * matrix2[k][j];
            }
        }
    }
    return result;
}

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

static int[][] MultiplyMatrixParallel(int[][] matrix1, int[][] matrix2, int numThreads)
{
    int rows = matrix1.Length;
    int columns = matrix2[0].Length;
    int[][] result = new int[rows][];


    Parallel.For(0, rows, new ParallelOptions { MaxDegreeOfParallelism = numThreads }, i =>
    {
        result[i] = new int[columns];
        for (int j = 0; j < columns; j++)
        {
            result[i][j] = 0;
            Parallel.For(0, matrix1[i].Length, k =>
            {
                result[i][j] += matrix1[i][k] * matrix2[k][j];
            });
        }
    });
    return result;
}

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

Бенчмарки

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

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

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

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