## Задание Кратко: реализовать умножение двух больших квадратных матриц. Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный. В параллельном алгоритме предусмотреть ручное задание количества потоков, каждый из которых будет выполнять умножение элементов матрицы в рамках своей зоны ответственности. ### Ход работы **Последовательный алгоритм** public static int[][] multiplyMatricesSequential(int[][] matrix1, int[][] matrix2) { int rows1 = matrix1.length; int columns1 = matrix1[0].length; int columns2 = matrix2[0].length; var matrixResult = new int[size][size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { for (int m = 0; m < size; m++) { matrixResult[i][j] += matrix1[i][m] * matrix2[m][j]; } } } return matrixResult; Параллельный алгоритм public static int[][] multiplyMatricesParallel(int[][] matrix1, int[][] matrix2) { int rows1 = matrix1.length; int columns1 = matrix1[0].length; int columns2 = matrix2[0].length; var matrixResult = new int[size][size]; ExecutorService executorService = Executors.newFixedThreadPool(nThreads); int blockSize = size / nThreads; for (int i = 0; i < nThreads; i++) { int startRow = i * blockSize; int endRow = (i + 1) * blockSize; if (i == nThreads - 1) { endRow = size; } int finalEndRow = endRow; executorService.submit(() -> { for (int row = startRow; row < finalEndRow; row++) { for (int col = 0; col < size; col++) { for (int m = 0; m < size; m++) { matrixResult[row][col] += matrix1[row][m] * matrix2[m][col]; } } } }); Результат Была проверка времени выполнения алгоритма для матриц размером 100х100, 300х300, 500х500 с разным количеством потоков. ![sreenshot](screen.png) Из данных скриншотов видно, что в случае с матрицей 100х100 последовательный алгоритм работает лучше, чем параллельный, в других случаях наоборот. Для остальных матриц параллельный алгоритм работает лучше, а также увеличение кол-ва потоков уменьшает время выполнения алгоритма. (хотя в случае матрицы 100х100 - сильно увеличивает) Видео: https://disk.yandex.ru/d/zeVdy1b0mC79cQ