Mon Oct 23, 2017 11:25 pm
I've been learning Eigen by implementing some tools, and am now at a point where I am aiming to improve the speed of my methods. I've enabled openMP via -fopenmp and used gprof to profile my code, and found that my Matlab/Octave code is actually faster, by a factor of 5 or so. In looking over the results of my profiling, I've found that the largest consumer of run time is using the partialPivLu() solver for my linear systems. Specifically, gprof indicates the following for the largest consumer of time:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
69.61 225.32 225.32 12923 0.02 0.02 Eigen::internal::inplace_transpose_selector<Eigen::Matrix<double, -1, -1, 0, -1, -1>, false, false>::run(Eigen::Matrix<double, -1, -1, 0, -1, -1>&)
Looking at the call tree, I find specifically that the following call consumes most of the time (by making the most calls to the above method:
Eigen::internal::triangular_solve_matrix<double, long, 1, 5, false, 0, 0>::run(long, long, double const*, long, double*, long, Eigen::internal::level3_blocking<double, double>&)
I've also tried a different solver, colPivHouseholderQr(), with similar timing results.
Is there a way to speed up some of these calls? I cannot use sparse or symmetric matrix solvers, since my matrices are generally neither. Any help would be appreciated.