aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/sparse_trisolver.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2008-10-19 17:06:11 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2008-10-19 17:06:11 +0000
commit76fe2e1b34b4388ea3d9585bc840a0bab20ee5be (patch)
treea8d14974b78f46796a934a10b867286aaa88316d /bench/sparse_trisolver.cpp
parentecc6c43dba2ca00d2f9d525dcd0d94941bea3fda (diff)
add/update some benchmark files used to test/compare sparse module features
Diffstat (limited to 'bench/sparse_trisolver.cpp')
-rw-r--r--bench/sparse_trisolver.cpp42
1 files changed, 27 insertions, 15 deletions
diff --git a/bench/sparse_trisolver.cpp b/bench/sparse_trisolver.cpp
index c6b29e88d..021433043 100644
--- a/bench/sparse_trisolver.cpp
+++ b/bench/sparse_trisolver.cpp
@@ -2,6 +2,7 @@
//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.005 -DSIZE=10000 && ./a.out
//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.05 -DSIZE=2000 && ./a.out
// -DNOGMM -DNOMTL
+// -I /home/gael/Coding/LinearAlgebra/CSparse/Include/ /home/gael/Coding/LinearAlgebra/CSparse/Lib/libcsparse.a
#ifndef SIZE
#define SIZE 10000
@@ -60,8 +61,9 @@ int main(int argc, char *argv[])
BenchTimer timer;
#if 1
EigenSparseTriMatrix sm1(rows,cols);
- VectorXf b = VectorXf::Random(cols);
- VectorXf x = VectorXf::Random(cols);
+ typedef Matrix<Scalar,Dynamic,1> DenseVector;
+ DenseVector b = DenseVector::Random(cols);
+ DenseVector x = DenseVector::Random(cols);
bool densedone = false;
@@ -81,13 +83,13 @@ int main(int argc, char *argv[])
eiToDense(sm1, m1);
m2 = m1;
- BENCH(x = m1.marked<Upper>().inverseProduct(b);)
+ BENCH(x = m1.marked<Upper>().solveTriangular(b);)
std::cout << " colmajor^-1 * b:\t" << timer.value() << endl;
- std::cerr << x.transpose() << "\n";
+// std::cerr << x.transpose() << "\n";
- BENCH(x = m2.marked<Upper>().inverseProduct(b);)
+ BENCH(x = m2.marked<Upper>().solveTriangular(b);)
std::cout << " rowmajor^-1 * b:\t" << timer.value() << endl;
- std::cerr << x.transpose() << "\n";
+// std::cerr << x.transpose() << "\n";
}
#endif
@@ -96,13 +98,13 @@ int main(int argc, char *argv[])
std::cout << "Eigen sparse\t" << density*100 << "%\n";
EigenSparseTriMatrixRow sm2 = sm1;
- BENCH(x = sm1.inverseProduct(b);)
+ BENCH(x = sm1.solveTriangular(b);)
std::cout << " colmajor^-1 * b:\t" << timer.value() << endl;
- std::cerr << x.transpose() << "\n";
+// std::cerr << x.transpose() << "\n";
- BENCH(x = sm2.inverseProduct(b);)
+ BENCH(x = sm2.solveTriangular(b);)
std::cout << " rowmajor^-1 * b:\t" << timer.value() << endl;
- std::cerr << x.transpose() << "\n";
+// std::cerr << x.transpose() << "\n";
// x = b;
// BENCH(sm1.inverseProductInPlace(x);)
@@ -115,6 +117,18 @@ int main(int argc, char *argv[])
// std::cerr << x.transpose() << "\n";
}
+ // CSparse
+ #ifdef CSPARSE
+ {
+ std::cout << "CSparse \t" << density*100 << "%\n";
+ cs *m1;
+ eiToCSparse(sm1, m1);
+
+ BENCH(x = b; if (!cs_lsolve (m1, x.data())){std::cerr << "cs_lsolve failed\n"; break;}; )
+ std::cout << " colmajor^-1 * b:\t" << timer.value() << endl;
+ }
+ #endif
+
// GMM++
#ifndef NOGMM
{
@@ -130,13 +144,13 @@ int main(int argc, char *argv[])
gmmX = gmmB;
BENCH(gmm::upper_tri_solve(m1, gmmX, false);)
std::cout << " colmajor^-1 * b:\t" << timer.value() << endl;
- std::cerr << Map<Matrix<Scalar,Dynamic,1> >(&gmmX[0], cols).transpose() << "\n";
+// std::cerr << Map<Matrix<Scalar,Dynamic,1> >(&gmmX[0], cols).transpose() << "\n";
gmmX = gmmB;
BENCH(gmm::upper_tri_solve(m2, gmmX, false);)
timer.stop();
std::cout << " rowmajor^-1 * b:\t" << timer.value() << endl;
- std::cerr << Map<Matrix<Scalar,Dynamic,1> >(&gmmX[0], cols).transpose() << "\n";
+// std::cerr << Map<Matrix<Scalar,Dynamic,1> >(&gmmX[0], cols).transpose() << "\n";
}
#endif
@@ -162,7 +176,7 @@ int main(int argc, char *argv[])
#endif
-
+ std::cout << "\n\n";
}
#endif
@@ -199,8 +213,6 @@ int main(int argc, char *argv[])
}
#endif
- std::cout << "\n\n";
-
return 0;
}