namespace Eigen { /** \page HiPerformance Advanced - Using Eigen with high performance
BLAS equivalent routine Efficient version
(compile to a single optimized evaluation)
Less efficient equivalent version
(requires multiple evaluations)
comments
GEMM m1 = s1 * m2 * m3 m1 = s1 * (m2 * m3) This is because m2 * m3 is evaluated by the scalar product.
GEMM m1 += s1 * m2.adjoint() * m3 m1 += (s1 * m2).adjoint() * m3 This is because our expression analyser stops at the first transpose expression and cannot extract the nested scalar multiple.
GEMM m1 += m2.adjoint() * m3 m1 += m2.conjugate().transpose() * m3 For the same reason. Use .adjoint() or .transpose().conjugate()
GEMM m1 -= (-(s0*m2).conjugate()*s1) * (s2 * m3.adjoint() * s3) Note that s0 is automatically conjugated during the simplification of the expression.
SYR m.sefadjointView().rankUpdate(v,s) Computes m += s * v * v.adjoint()
SYR2 m.sefadjointView().rankUpdate(u,v,s) Computes m += s * u * v.adjoint() + s * v * u.adjoint()
SYRK m1.sefadjointView().rankUpdate(m2.adjoint(),s) Computes m1 += s * m2.adjoint() * m2
SYMM/HEMM m3 -= s1 * m1.sefadjointView() * m2.adjoint()
SYMM/HEMM m3 += s1 * m2.transpose() * m1.conjugate().sefadjointView()
TRMM m3 -= s1 * m1.triangularView() * m2.adjoint()
TRSV / TRSM m1.adjoint().triangularView().solveInPlace(m2)
*/ }