From fa60c72398fcfcacda5e034e796d85ee36da527d Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Thu, 9 Jul 2009 17:11:03 +0200 Subject: started to simplify the triangular solvers --- Eigen/src/Core/Product.h | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'Eigen/src/Core/Product.h') diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h index d63a7aa95..44fde3dcf 100644 --- a/Eigen/src/Core/Product.h +++ b/Eigen/src/Core/Product.h @@ -69,7 +69,7 @@ struct ProductReturnType typedef typename ei_nested::type >::type RhsNested; - + typedef Product Type; }; @@ -268,7 +268,9 @@ template class Product */ EIGEN_STRONG_INLINE bool _useCacheFriendlyProduct() const { - return m_lhs.cols()>=EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD + #define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 16 + // TODO do something more accurate here + return m_lhs.cols()>=EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD && ( rows()>=EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD || cols()>=EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD); } @@ -624,7 +626,7 @@ struct ei_cache_friendly_product_selector inline static void run(DestDerived& res, const ProductType& product, typename ProductType::Scalar alpha) { @@ -633,7 +635,7 @@ struct ei_cache_friendly_product_selector::size==1) ||((DestDerived::Flags&ActualPacketAccessBit) && (!(DestDerived::Flags & RowMajorBit))) }; @@ -645,7 +647,7 @@ struct ei_cache_friendly_product_selector >(_res, res.size()) = res; } - +// std::cerr << "colmajor * vector " << EvalToRes << "\n"; ei_cache_friendly_product_colmajor_times_vector ( res.size(), @@ -706,7 +708,7 @@ struct ei_cache_friendly_product_selector >(_res, res.size()) = res; } - + ei_cache_friendly_product_colmajor_times_vector (res.size(), &actualRhs.const_cast_derived().coeffRef(0,0), actualRhs.stride(), @@ -725,7 +727,7 @@ template struct ei_cache_friendly_product_selector { typedef typename ProductType::Scalar Scalar; - + typedef ei_product_factor_traits::_LhsNested> LhsProductTraits; typedef ei_product_factor_traits::_RhsNested> RhsProductTraits; @@ -753,7 +755,7 @@ struct ei_cache_friendly_product_selector >(_rhs, actualRhs.size()) = actualRhs; } - + ei_cache_friendly_product_rowmajor_times_vector ( &actualLhs.const_cast_derived().coeffRef(0,0), actualLhs.stride(), @@ -774,7 +776,7 @@ struct ei_cache_friendly_product_selector::size==1) || (ActualLhsType::Flags&ActualPacketAccessBit)) && (ActualLhsType::Flags & RowMajorBit) }; @@ -796,7 +798,7 @@ struct ei_cache_friendly_product_selector >(_lhs, actualLhs.size()) = actualLhs; } - + ei_cache_friendly_product_rowmajor_times_vector ( &actualRhs.const_cast_derived().coeffRef(0,0), actualRhs.stride(), @@ -825,11 +827,12 @@ template template inline Derived& MatrixBase::operator+=(const Flagged, 0, EvalBeforeNestingBit | EvalBeforeAssigningBit>& other) -{ +{//std::cerr << "operator+=\n"; if (other._expression()._useCacheFriendlyProduct()) ei_cache_friendly_product_selector >::run(const_cast_derived(), other._expression(), Scalar(1)); - else + else { //std::cerr << "no cf\n"; lazyAssign(derived() + other._expression()); + } return derived(); } @@ -893,7 +896,7 @@ inline void Product::_cacheFriendlyEvalAndAdd(DestDerived& typedef typename LhsProductTraits::ActualXprType ActualLhsType; typedef typename RhsProductTraits::ActualXprType ActualRhsType; - + const ActualLhsType& actualLhs = LhsProductTraits::extract(m_lhs); const ActualRhsType& actualRhs = RhsProductTraits::extract(m_rhs); -- cgit v1.2.3