From 508f06ac0f9cf2509900138adaf23dee3cdc51c4 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Tue, 28 Jul 2009 17:11:15 +0200 Subject: update doc --- doc/I02_HiPerformance.dox | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/doc/I02_HiPerformance.dox b/doc/I02_HiPerformance.dox index 8f23b5d19..2c77f87b3 100644 --- a/doc/I02_HiPerformance.dox +++ b/doc/I02_HiPerformance.dox @@ -63,6 +63,14 @@ handled by a single GEMM-like call are correctly detected. Make sure the matrix product is the top most expression. +\code m1 += s1 * (m2 * m3).lazy(); \endcode +\code m1 += s1 * m2 * m3; // using a naive product \endcode +\code m1 += (s1 * m2 * m3).lazy(); \endcode +Even though this expression is evaluated without temporary, it is actually even + worse than the previous case because here the .lazy() enforces Eigen to use a + naive (and slow) evaluation of the product. + + \code m1 = m1 + m2 * m3; \endcode \code temp = (m2 * m3).lazy(); m1 = m1 + temp; \endcode \code m1 += (m2 * m3).lazy(); \endcode @@ -70,24 +78,12 @@ handled by a single GEMM-like call are correctly detected. and so the matrix product will be immediately evaluated. -\code m1 += ((s1 * m2).transpose() * m3).lazy(); \endcode -\code temp = (s1*m2).transpose(); m1 = (temp * m3).lazy(); \endcode -\code m1 += (s1 * m2.transpose() * m3).lazy(); \endcode -This is because our expression analyzer stops at the first expression which cannot - be converted to a scalar multiple of a conjugate and therefore the nested scalar - multiple cannot be properly extracted. - - -\code m1 += (m2.conjugate().transpose() * m3).lazy(); \endcode -\code temp = m2.conjugate().transpose(); m1 += (temp * m3).lazy(); \endcode -\code m1 += (m2.adjoint() * m3).lazy(); \endcode -Same reason. Use .adjoint() or .transpose().conjugate() - - \code m1 += ((s1*m2).block(....) * m3).lazy(); \endcode \code temp = (s1*m2).block(....); m1 += (temp * m3).lazy(); \endcode \code m1 += (s1 * m2.block(....) * m3).lazy(); \endcode -Same reason. +This is because our expression analyzer is currently not able to extract trivial + expressions nested in a Block expression. Therefore the nested scalar + multiple cannot be properly extracted. @@ -129,7 +125,7 @@ Of course all these remarks hold for all other kind of products that we will des SYR -m.seductive().rankUpdate(v,s) +m.sefadjointView().rankUpdate(v,s) Computes m += s * v * v.adjoint() -- cgit v1.2.3