diff options
author | Desire NUENTSA <desire.nuentsa_wakam@inria.fr> | 2012-05-25 17:58:43 +0200 |
---|---|---|
committer | Desire NUENTSA <desire.nuentsa_wakam@inria.fr> | 2012-05-25 17:58:43 +0200 |
commit | 1b9097644d7810fc4cf30b59aa60004e76c47b6d (patch) | |
tree | e68c1b9b743bb74bcd50cd3d4fe3176b2d0e96b6 /bench/spbench | |
parent | 5cbe6a5fbfb18c8855d78c5f43dabead3ecace9c (diff) |
Add common options to the benchmark interface
Diffstat (limited to 'bench/spbench')
-rw-r--r-- | bench/spbench/spbenchsolver.cpp | 15 | ||||
-rw-r--r-- | bench/spbench/spbenchsolver.h | 18 |
2 files changed, 26 insertions, 7 deletions
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 <RelErr> Sets the relative tolerance for iterative solvers (default 1e-08) + cout<< " --maxits <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<double>(current_dir, statFileExists, statFile); + Browse_Matrices<double>(current_dir, statFileExists, statFile,maxiters, tol); // Test the matrices in %EIGEN_MATRIXDIR/complex current_dir = matrix_dir + "/complex"; - Browse_Matrices<std::complex<double> >(current_dir, statFileExists, statFile); + Browse_Matrices<std::complex<double> >(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<typename T> inline typename NumTraits<T>::Real test_precision() { return NumTraits<T>::dummy_precision(); } template<> inline float test_precision<float>() { return 1e-3f; } template<> inline double test_precision<double>() { 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<Scalar>() ) + if ( stat.rel_error > RelErr ) { stat.info = NoConvergence; return stat; @@ -199,7 +203,9 @@ template<typename Solver, typename Scalar> Stats call_itersolver(Solver &solver, const typename Solver::MatrixType& A, const Matrix<Scalar, Dynamic, 1>& b, const Matrix<Scalar, Dynamic, 1>& 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<Scalar>&A, unsigned int sym, Matrix<Scalar, printStatItem(stat, EIGEN_GMRES_ILUT, best_time_id, best_time_val); } - // Symmetric and not necessarily positive-definites - if ( (sym == Symmetric) || (sym == SPD) ) + // Hermitian and not necessarily positive-definites + if (sym != NonSymmetric) { // Internal Cholesky { @@ -494,8 +500,10 @@ int SelectSolvers(const SparseMatrix<Scalar>&A, unsigned int sym, Matrix<Scalar, * and optionally in the provided html file */ template <typename Scalar> -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<Scalar> it(folder); Stats stat[EIGEN_ALL_SOLVERS]; for ( ; it; ++it) |