aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/spbench
diff options
context:
space:
mode:
authorGravatar Desire NUENTSA <desire.nuentsa_wakam@inria.fr>2012-05-25 17:58:43 +0200
committerGravatar Desire NUENTSA <desire.nuentsa_wakam@inria.fr>2012-05-25 17:58:43 +0200
commit1b9097644d7810fc4cf30b59aa60004e76c47b6d (patch)
treee68c1b9b743bb74bcd50cd3d4fe3176b2d0e96b6 /bench/spbench
parent5cbe6a5fbfb18c8855d78c5f43dabead3ecace9c (diff)
Add common options to the benchmark interface
Diffstat (limited to 'bench/spbench')
-rw-r--r--bench/spbench/spbenchsolver.cpp15
-rw-r--r--bench/spbench/spbenchsolver.h18
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)