distributed-computing/tasks/savitskiy-al/lab_5
2023-12-15 21:02:23 +04:00
..
ConsoleApp1 lab 5 2023-12-15 21:02:23 +04:00
pic lab 5 2023-12-15 21:02:23 +04:00
.gitignore lab 5 2023-12-15 21:02:23 +04:00
README.md lab 5 2023-12-15 21:02:23 +04:00

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

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

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

Выбрал язык C#, Консольное приложение.

Проверяю правильность работы алгоритма

    public int[,] MultiplicationMatrix(int[,] matrix1, int[,] matrix2, int threadCount)
{
    var result = new int[matrix1.GetLength(0), matrix1.GetLength(1)];
    for(int i = 0; i < result.GetLength(0); i++)
    {
        for (int j = 0; j < result.GetLength(1); j++)
        {
            result[i, j] = 0;
        }
    }

    for (int i = 0; i < matrix1.GetLength(0); i++)
    {
        Parallel.For(0, matrix2.GetLength(1), new ParallelOptions() { MaxDegreeOfParallelism = threadCount },
            (j) =>
        {

            for (int k = 0; k < matrix2.GetLength(0); k++)
            {
                var value = matrix1[i, k] * matrix2[k, j];
                Interlocked.Add(ref result[i, j], value);
            }
        });
    }

    return result;
}

Установил библиотеку BenchmarkDotNet для замера производительности алгоритма.

Бенчмарки

Делаю 6 пробных запусков Матрицы 100х100, 300х300, 500х500 Количество потоков 1,12

Нас интересуют преимущественно две колонки - Mean и Allocated.

Mean показывает среднее время выполнения бенчмарка Allocated показывает количество выделенной памяти

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

Вывод: Параллельный алгоритм работает быстрее чем однопоточный, если мы обрабатываем большие данные. Также многопоточное выполнение занимает больше памяти.