Created attachment 794 [details]
Performance benchmark for LL::rankUpdate()
LLT::rankUpdate() takes considerably longer on RowMajor matrices than on ColMajor ones.
The attached code can be used to measure the execution time of 100 random updates to the Cholesky decomposition of a random 5000-by-5000 matrix. Compile it as follows:
g++ -Wall -O3 --std=c++11 -o rank_update_col eigen_rank_update.cc
g++ -Wall -O3 --std=c++11 -DROWMAJOR -o rank_update_row eigen_rank_update.cc
And then run:
The ColMajor version takes 8.2 seconds on my system, while the RowMajor variant needs 22.9 seconds.
The situation is reversed when computing the upper triangular decomposition instead of the (default) lower triangular. So, this is probably not really a bug, but just natural. However, maybe it should be documented that upper triangular decompositions provide better performance for row-major storage format.
Right, this is also true for the full factorization, though the impact is lower. Added doc:
-- GitLab Migration Automatic Message --
This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity.
You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1456.