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); } }
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()); }