From 1b9097644d7810fc4cf30b59aa60004e76c47b6d Mon Sep 17 00:00:00 2001 From: Desire NUENTSA Date: Fri, 25 May 2012 17:58:43 +0200 Subject: Add common options to the benchmark interface --- bench/spbench/spbenchsolver.cpp | 15 +++++++++++++-- bench/spbench/spbenchsolver.h | 18 +++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) (limited to 'bench/spbench') diff --git a/bench/spbench/spbenchsolver.cpp b/bench/spbench/spbenchsolver.cpp index bcbe0d84f..f7b68ec7d 100644 --- a/bench/spbench/spbenchsolver.cpp +++ b/bench/spbench/spbenchsolver.cpp @@ -16,6 +16,8 @@ void bench_printhelp() cout<< " -h or --help \n print this help and return\n\n"; cout<< " -d matrixdir \n Use matrixdir as the matrix folder instead of the one specified in the environment variable EIGEN_MATRIXDIR\n\n"; cout<< " -o outputfile.html \n Output the statistics to a html file \n\n"; + cout<< " --eps Sets the relative tolerance for iterative solvers (default 1e-08) + cout<< " --maxits Sets the maximum number of iterations (default 1000) } int main(int argc, char ** args) @@ -56,14 +58,23 @@ int main(int argc, char ** args) std::cerr << "Unable to open the provided file for writting... \n"; } + // Get the maximum number of iterations and the tolerance + int maxiters = 1000; + double tol = 1e-08; + string inval; + if (get_options(argc, args, "--eps", &inval)) + tol = atof(inval.c_str()); + if(get_options(argc, args, "--maxits", &inval)) + maxiters = atoi(inval.c_str()); + string current_dir; // Test the matrices in %EIGEN_MATRIXDIR/real current_dir = matrix_dir + "/real"; - Browse_Matrices(current_dir, statFileExists, statFile); + Browse_Matrices(current_dir, statFileExists, statFile,maxiters, tol); // Test the matrices in %EIGEN_MATRIXDIR/complex current_dir = matrix_dir + "/complex"; - Browse_Matrices >(current_dir, statFileExists, statFile); + Browse_Matrices >(current_dir, statFileExists, statFile, maxiters, tol); if(statFileExists) { diff --git a/bench/spbench/spbenchsolver.h b/bench/spbench/spbenchsolver.h index 3f50de18e..6d765a997 100644 --- a/bench/spbench/spbenchsolver.h +++ b/bench/spbench/spbenchsolver.h @@ -94,6 +94,10 @@ struct Stats{ int isIterative; }; +// Global variables for input parameters +int MaximumIters; // Maximum number of iterations +double RelErr; // Relative error of the computed solution + template inline typename NumTraits::Real test_precision() { return NumTraits::dummy_precision(); } template<> inline float test_precision() { return 1e-3f; } template<> inline double test_precision() { return 1e-6; } @@ -175,7 +179,7 @@ Stats call_solver(Solver &solver, const typename Solver::MatrixType& A, const Ma temp = A * x; stat.rel_error = (b-temp).norm()/b.norm(); } - if ( stat.rel_error > test_precision() ) + if ( stat.rel_error > RelErr ) { stat.info = NoConvergence; return stat; @@ -199,7 +203,9 @@ template Stats call_itersolver(Solver &solver, const typename Solver::MatrixType& A, const Matrix& b, const Matrix& refX) { Stats stat; - solver.setTolerance(1e-10); + solver.setTolerance(RelErr); + solver.setMaxIterations(MaximumIters); + stat = call_solver(solver, A, b, refX); stat.iterations = solver.iterations(); return stat; @@ -375,8 +381,8 @@ int SelectSolvers(const SparseMatrix&A, unsigned int sym, Matrix&A, unsigned int sym, Matrix -void Browse_Matrices(const string folder, bool statFileExists, std::string& statFile) +void Browse_Matrices(const string folder, bool statFileExists, std::string& statFile, int maxiters, double tol) { + MaximumIters = maxiters; // Maximum number of iterations, global variable + RelErr = tol; //Relative residual error as stopping criterion for iterative solvers MatrixMarketIterator it(folder); Stats stat[EIGEN_ALL_SOLVERS]; for ( ; it; ++it) -- cgit v1.2.3