# Отчет по лабораторной работе №5 Выполнила студентка гр. ИСЭбд-41 Зиновьева А. Д. ## Создание приложения Было выбрано консольное приложение, язык программирования - c#. Обычный алгоритм: ```cs 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; } ``` Параллельный алгоритм: ```cs 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; } ``` ![](pic/Screenshot_1.jpg) В результате обычный алгоритм выполнился за ``0,0003575`` секунды, а паралелльный за ``0,0193432`` секунды. ## Бенчмарки Протестируем обычный и параллельный алгоритмы на матрицах различных размеров: 100х100, 300х300 и 500х500. Количество потоков: ``4`` ![](pic/Screenshot_2.jpg) Количество потоков: ``12`` ![](pic/Screenshot_3.jpg) ``Вывод``: Последовательный алгоритм работает быстрее, если количество элементов не слишком большое. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных. Оптимальное количество потоков для эффективной работы - 12 (так в сравнении с 4 получилось быстрее).