diff options
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Core/Dot.h | 2 | ||||
-rw-r--r-- | Eigen/src/Core/Product.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/util/XprHelper.h | 6 | ||||
-rw-r--r-- | Eigen/src/QR/Tridiagonalization.h | 1 |
4 files changed, 8 insertions, 5 deletions
diff --git a/Eigen/src/Core/Dot.h b/Eigen/src/Core/Dot.h index 4f185ea5b..c5f2e8505 100644 --- a/Eigen/src/Core/Dot.h +++ b/Eigen/src/Core/Dot.h @@ -394,7 +394,7 @@ MatrixBase<Derived>::blueNorm() const { ax = ei_abs(coeff(j)); if(ax > b2) abig += ei_abs2(ax*s2m); - else if(ax < b2) asml += ei_abs2(ax*s1m); + else if(ax < b1) asml += ei_abs2(ax*s1m); else amed += ei_abs2(ax); } if(abig > Scalar(0)) diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h index f0c4480de..6feede458 100644 --- a/Eigen/src/Core/Product.h +++ b/Eigen/src/Core/Product.h @@ -208,10 +208,10 @@ struct ei_traits<Product<LhsNested, RhsNested, ProductMode> > RhsRowMajor = RhsFlags & RowMajorBit, CanVectorizeRhs = RhsRowMajor && (RhsFlags & PacketAccessBit) - && (ColsAtCompileTime % ei_packet_traits<Scalar>::size == 0), + && (ColsAtCompileTime == Dynamic || (ColsAtCompileTime % ei_packet_traits<Scalar>::size) == 0), CanVectorizeLhs = (!LhsRowMajor) && (LhsFlags & PacketAccessBit) - && (RowsAtCompileTime % ei_packet_traits<Scalar>::size == 0), + && (RowsAtCompileTime == Dynamic || (RowsAtCompileTime % ei_packet_traits<Scalar>::size) == 0), EvalToRowMajor = RhsRowMajor && (ProductMode==(int)CacheFriendlyProduct ? LhsRowMajor : (!CanVectorizeLhs)), diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h index a4ffb8a20..d392e27ba 100644 --- a/Eigen/src/Core/util/XprHelper.h +++ b/Eigen/src/Core/util/XprHelper.h @@ -86,9 +86,11 @@ class ei_compute_matrix_flags { enum { row_major_bit = Options&RowMajor ? RowMajorBit : 0, - inner_max_size = row_major_bit ? MaxCols : MaxRows, + inner_max_size = MaxCols==1 ? MaxRows + : MaxRows==1 ? MaxCols + : row_major_bit ? MaxCols : MaxRows, is_big = inner_max_size == Dynamic, - is_packet_size_multiple = (Cols*Rows) % ei_packet_traits<Scalar>::size == 0, + is_packet_size_multiple = Rows==Dynamic || Cols==Dynamic || ((Cols*Rows) % ei_packet_traits<Scalar>::size) == 0, aligned_bit = (((Options&DontAlign)==0) && (is_big || is_packet_size_multiple)) ? AlignedBit : 0, packet_access_bit = ei_packet_traits<Scalar>::size > 1 && aligned_bit ? PacketAccessBit : 0 }; diff --git a/Eigen/src/QR/Tridiagonalization.h b/Eigen/src/QR/Tridiagonalization.h index 4808b69ce..8051f7a55 100644 --- a/Eigen/src/QR/Tridiagonalization.h +++ b/Eigen/src/QR/Tridiagonalization.h @@ -277,6 +277,7 @@ Tridiagonalization<MatrixType>::matrixQ(void) const Scalar tmp = m_matrix.coeff(i+1,i); m_matrix.const_cast_derived().coeffRef(i+1,i) = 1; + // TODO this product could be optimized by processing the submatrix per panel of at least 4 columns matQ.corner(BottomRight,n-i-1,n-i-1) -= ((m_hCoeffs.coeff(i) * m_matrix.col(i).end(n-i-1)) * (m_matrix.col(i).end(n-i-1).adjoint() * matQ.corner(BottomRight,n-i-1,n-i-1)).lazy()).lazy(); |