Ejemplo n.º 1
0
        private static async Task PerformTesting(
            int[] sizes,
            MatrixProvider provider,
            ResultsSaver saver,
            IEquationSolver solver,
            Action <Matrix> matrixAction = null)
        {
            Stopwatch stopwatch = new Stopwatch();

            foreach (int size in sizes)
            {
                Matrix matrix = provider.GetMatrix(size);

                if (matrixAction != null)
                {
                    matrixAction(matrix);
                }

                stopwatch.Start();
                CalculationResult result = solver.Solve(matrix);
                stopwatch.Stop();

                Console.WriteLine($"{size}x{size} ({result.Answers.Length}): {stopwatch.ElapsedMilliseconds}ms, {stopwatch.ElapsedTicks} ticks");
                stopwatch.Reset();

                string outputFile = string.Format(OutputFileTemplate, $"{size}x{size}", solver.GetType());
                await saver.SaveAsync(outputFile, result);
            }
        }
Ejemplo n.º 2
0
        public static async Task Main(string[] args)
        {
            MatrixProvider provider = new MatrixProvider(ImagePath);
            ResultsSaver   saver    = new ResultsSaver();

            IEquationSolver sequentialSolver = new EquationSolver();
            IEquationSolver parallelSolver   = new ParallelEquationSolver();

            IEquationSolver choleskySolver         = new CholeskySolver();
            IEquationSolver parallelCholeskySolver = new ParallelCholeskySolver();

            IEquationSolver diagonalSolver         = new DiagonalSolver();
            IEquationSolver parallelDiagonalSolver = new ParallelDiagonalSolver();

            IEquationSolver jacobiSolver         = new JacobiSolver();
            IEquationSolver parallelJacobiSolver = new ParallelJacobiSolver();

            int[] sizes = { 10, 100, 500 };

            sequentialSolver.Solve(GetTestMatrix());

            // Console.WriteLine("Sequential Cramer:");
            // await PerformTesting(sizes, provider, saver, sequentialSolver);
            //
            // Console.WriteLine();
            // Console.WriteLine("Parallel Cramer:");
            // await PerformTesting(sizes, provider, saver, parallelSolver);

            // Console.WriteLine();
            // Console.WriteLine("Sequential Cholesky:");
            // choleskySolver.Solve(GetCholeskyTestMatrix());
            // await PerformTesting(sizes, provider, saver, choleskySolver);
            //
            // Console.WriteLine();
            // Console.WriteLine("Parallel Cholesky:");
            // parallelSolver.Solve(GetCholeskyTestMatrix());
            // await PerformTesting(sizes, provider, saver, parallelCholeskySolver);
            //
            // Console.WriteLine();
            // Console.WriteLine("Sequential K-Diagonal:");
            // diagonalSolver.Solve(GetDiagonalTestMatrix());
            // await PerformTesting(sizes, provider, saver, diagonalSolver);
            //
            // Console.WriteLine();
            // Console.WriteLine("Parallel K-Diagonal:");
            // parallelDiagonalSolver.Solve(GetDiagonalTestMatrix2());
            // await PerformTesting(sizes, provider, saver, parallelDiagonalSolver);

            Console.WriteLine();
            Console.WriteLine("Sequential Jacobi on common matrix:");
            jacobiSolver.Solve(GetDiagonalTestMatrix2());
            await PerformTesting(sizes, provider, saver, jacobiSolver);

            Console.WriteLine();
            Console.WriteLine("Sequential Jacobi on chess matrix:");
            jacobiSolver.Solve(GetDiagonalTestMatrix2());
            await PerformTesting(sizes, provider, saver, jacobiSolver, matrix => matrix.ToChessZero());

            Console.WriteLine();
            Console.WriteLine("Parallel Jacobi on common matrix:");
            parallelJacobiSolver.Solve(GetDiagonalTestMatrix2());
            await PerformTesting(sizes, provider, saver, parallelJacobiSolver);

            Console.WriteLine();
            Console.WriteLine("Parallel Jacobi on chess matrix:");
            parallelJacobiSolver.Solve(GetDiagonalTestMatrix2());
            await PerformTesting(sizes, provider, saver, parallelJacobiSolver, matrix => matrix.ToChessZero());
        }