# Отчет по лабораторной работе №5 Выполнил студент гр. ИСЭбд-41 Савицкий А.В. ## Создание приложения Выбрал язык C#, Консольное приложение. Проверяю правильность работы алгоритма ```cs 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; } ``` ![](pic/1.png) Установил библиотеку BenchmarkDotNet для замера производительности алгоритма. ## Бенчмарки Делаю 6 пробных запусков Матрицы 100х100, 300х300, 500х500 Количество потоков 1,12 ![](pic/2.png) Нас интересуют преимущественно две колонки - Mean и Allocated. Mean показывает среднее время выполнения бенчмарка Allocated показывает количество выделенной памяти Для матриц 100х100 однопоточный алгоритм отработал быстрее чем многопоточный, однако для более больших матриц время выполнения серьезно уменшилось. Вывод: Параллельный алгоритм работает быстрее чем однопоточный, если мы обрабатываем большие данные. Также многопоточное выполнение занимает больше памяти.