distributed-computing/tasks/mikhailov-ys/lab_5
2024-01-08 18:22:24 +04:00
..
Main lab5 2024-01-08 18:22:24 +04:00
pic.PNG lab5 2024-01-08 18:22:24 +04:00
README.md lab5 2024-01-08 18:22:24 +04:00

Отчёт по лабораторной работе №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;
    }

Результаты

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