KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
At Eigen version I use "true" fixed size matrices and vectors, better algorithm (LDLT versus LU at uBlas), it uses SIMD instructions internally. So, why it is slower than uBlas on following example? I am sure, I am doing something wrong - Eigen MUST be faster, or at least comparable. #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/lu.hpp> #include <boost/numeric/ublas/symmetric.hpp> #include <boost/progress.hpp> #include <Eigen/Dense> #include <iostream> using namespace boost; using namespace std; const int n=9; const int total=100000; void test_ublas() { using namespace boost::numeric::ublas; cout << "Boost.ublas "; double r=1.0; { boost::progress_timer t; for(int j=0;j!=total;++j) { //symmetric_matrix< double,lower,row_major,bounded_array<double,(1+n)*n/2> > A(n,n); matrix<double,row_major,bounded_array<double,n*n> > A(n,n); permutation_matrix< unsigned char,bounded_array<unsigned char,n> > P(n); bounded_vector<double,n> v; for(int i=0;i!=n;++i) for(int k=0;k!=n;++k) A(i,k)=0.0; for(int i=0;i!=n;++i) { A(i,i)=1.0+i; v[i]=i; } lu_factorize(A,P); lu_substitute(A,P,v); r+=inner_prod(v,v); } } cout << r << endl; } void test_eigen() { using namespace Eigen; cout << "Eigen "; double r=1.0; { boost::progress_timer t; for(int j=0;j!=total;++j) { Matrix<double,n,n> A; Matrix<double,n,1> b; for(int i=0;i!=n;++i) { A(i,i)=1.0+i; b[i]=i; } Matrix<doubl
Tags (comma-separated)
Save Edits
Cancel