Re: [eigen] Optimization advice for a specific expression |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
On 2016-02-05 13:36, Alberto Luaces wrote:
| Eigen version | General algorithm | Hand-coded algorithm |
| 3.2.7 | 0.10s | 0.04s |
| 3.3-beta1 | 0.21s | 0.15s |
I am attaching a minimal test case for reference. The bottleneck lies
on the function InertiaTensor::addFace(). The data from the table were
computed with the compilation flags "-O3 -DNDEBUG". Eigen 3.3-beta1
reports its version as "3.2.92"
That regression definitely does not look good. On my machine, I can only
confirm the regression for the hand-coded version, however. The reason
appears to be a call to
_ZN5Eigen8internal26call_dense_assignment_loopINS_6MatrixIdLi3ELi3ELi0ELi3ELi3EEENS_7ProductINS_5BlockINS2_IdLi4ELi4ELi0ELi4ELi4EEELi3ELi3ELb0EEENS_9TransposeIS7_EELi1EEENS0_9assign_opIdEEEEvRKT_RKT0_RKT1_
which is not inlined. I was able to fix that by adding lots of
EIGEN_STRONG_INLINE in src/Core/AssignEvaluator.h
@Gael, can you confirm? Or is it better to use EIGEN_ALWAYS_INLINE, here?
Other than that, your code is still not optimal regarding vectorization,
partially that is Eigen's "fault", but it is quite hard to automatically
decide what can be vectorized efficiently.
E.g.,
G.template leftCols<3>() * G.template leftCols<3>().transpose() + w *
w.transpose();
gets vectorized, whereas the following does not:
G.template leftCols<3>() * G.template
topRightCorner<3,3>().transpose() + w * w.template head<3>().transpose();
OTOH, your version is not vectorizable (without making the vectorization
logic extremely complicated), since G.block<3,3>() will not be accessed
packet-wise.
Christoph
--
Dipl. Inf., Dipl. Math. Christoph Hertzberg
Universität Bremen
FB 3 - Mathematik und Informatik
AG Robotik
Robert-Hooke-Straße 1
28359 Bremen, Germany
Zentrale: +49 421 178 45-6611
Besuchsadresse der Nebengeschäftsstelle:
Robert-Hooke-Straße 5
28359 Bremen, Germany
Tel.: +49 421 178 45-4021
Empfang: +49 421 178 45-6600
Fax: +49 421 178 45-4150
E-Mail: chtz@xxxxxxxxxxxxxxxxxxxxxxxx
Weitere Informationen: http://www.informatik.uni-bremen.de/robotik