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 |
Computes m += s * v * v.adjoint() | |
| SYR2 | m.sefadjointView |
Computes m += s * u * v.adjoint() + s * v * u.adjoint() | |
| SYRK | m1.sefadjointView |
Computes m1 += s * m2.adjoint() * m2 | |
| SYMM/HEMM | m3 -= s1 * m1.sefadjointView |
||
| SYMM/HEMM | m3 += s1 * m2.transpose() * m1.conjugate().sefadjointView |
||
| TRMM | m3 -= s1 * m1.triangularView |
||
| TRSV / TRSM | m1.adjoint().triangularView |
||