# Отчёт по лабораторной работе №5 Выполнил: студент гр. ИСЭбд-41 Михайлов Ю.С. ## Запуск приложения Было выбрано консольное приложение, язык программирования - C#. Перемножение матриц обычным алгоритмом: ``` public static int[][] MultiplySequential(int[][] matrixA, int[][] matrixB) { int rowsA = matrixA.Length; int colsA = matrixA[0].Length; int colsB = matrixB[0].Length; int[][] result = new int[rowsA][]; for (int i = 0; i < rowsA; i++) { result[i] = new int[colsB]; for (int j = 0; j < colsB; j++) { for (int k = 0; k < colsA; k++) { result[i][j] += matrixA[i][k] * matrixB[k][j]; } } } return result; } ``` Перемножение матриц параллельным алгоритмом: ``` public static int[][] MultiplyParallel(int[][] matrixA, int[][] matrixB, int numThreads) { int rowsA = matrixA.Length; int colsA = matrixA[0].Length; int colsB = matrixB[0].Length; int[][] result = new int[rowsA][]; Parallel.For(0, rowsA, new ParallelOptions { MaxDegreeOfParallelism = numThreads }, i => { result[i] = new int[colsB]; for (int j = 0; j < colsB; j++) { for (int k = 0; k < colsA; k++) { result[i][j] += matrixA[i][k] * matrixB[k][j]; } } }); return result; } ``` ## Результаты ![](pic.PNG) Вывод: если в матрице не слишком много элементов, обычный алгоритм работает быстрее. Параллельный алгоритм следует использовать для обработки большого количества данных. В сравнении с однопоточным алгоритмом, работа параллельного в несколько раз быстрее.