make sure the correct diagoanl() function is called in trace()

This commit is contained in:
Gael Guennebaud 2010-02-04 18:51:29 +01:00
parent 73eb0e633c
commit 52167be4c8

View File

@ -49,7 +49,7 @@ private:
MightVectorize = (int(Derived::Flags)&ActualPacketAccessBit) MightVectorize = (int(Derived::Flags)&ActualPacketAccessBit)
&& (ei_functor_traits<Func>::PacketAccess), && (ei_functor_traits<Func>::PacketAccess),
MayLinearVectorize = MightVectorize && (int(Derived::Flags)&LinearAccessBit), MayLinearVectorize = MightVectorize && (int(Derived::Flags)&LinearAccessBit),
MaySliceVectorize = MightVectorize && int(InnerMaxSize)>=3*PacketSize MaySliceVectorize = MightVectorize && int(InnerMaxSize)>=3*PacketSize
}; };
public: public:
@ -58,7 +58,7 @@ public:
: int(MaySliceVectorize) ? int(SliceVectorizedTraversal) : int(MaySliceVectorize) ? int(SliceVectorizedTraversal)
: int(DefaultTraversal) : int(DefaultTraversal)
}; };
private: private:
enum { enum {
Cost = Derived::SizeAtCompileTime * Derived::CoeffReadCost Cost = Derived::SizeAtCompileTime * Derived::CoeffReadCost
@ -123,7 +123,7 @@ struct ei_redux_novec_unroller<Func, Derived, Start, 0>
}; };
/*** vectorization ***/ /*** vectorization ***/
template<typename Func, typename Derived, int Start, int Length> template<typename Func, typename Derived, int Start, int Length>
struct ei_redux_vec_unroller struct ei_redux_vec_unroller
{ {
@ -223,7 +223,7 @@ struct ei_redux_impl<Func, Derived, LinearVectorizedTraversal, NoUnrolling>
for(int index = alignedStart + packetSize; index < alignedEnd; index += packetSize) for(int index = alignedStart + packetSize; index < alignedEnd; index += packetSize)
packet_res = func.packetOp(packet_res, mat.template packet<alignment>(index)); packet_res = func.packetOp(packet_res, mat.template packet<alignment>(index));
res = func.predux(packet_res); res = func.predux(packet_res);
for(int index = 0; index < alignedStart; ++index) for(int index = 0; index < alignedStart; ++index)
res = func(res,mat.coeff(index)); res = func(res,mat.coeff(index));
@ -265,7 +265,7 @@ struct ei_redux_impl<Func, Derived, SliceVectorizedTraversal, NoUnrolling>
for(int i=0; i<packetedInnerSize; i+=int(packetSize)) for(int i=0; i<packetedInnerSize; i+=int(packetSize))
packet_res = func.packetOp(packet_res, mat.template packet<Unaligned> packet_res = func.packetOp(packet_res, mat.template packet<Unaligned>
(isRowMajor?j:i, isRowMajor?i:j)); (isRowMajor?j:i, isRowMajor?i:j));
res = func.predux(packet_res); res = func.predux(packet_res);
for(int j=0; j<outerSize; ++j) for(int j=0; j<outerSize; ++j)
for(int i=packetedInnerSize; i<innerSize; ++i) for(int i=packetedInnerSize; i<innerSize; ++i)
@ -382,7 +382,7 @@ template<typename Derived>
EIGEN_STRONG_INLINE typename ei_traits<Derived>::Scalar EIGEN_STRONG_INLINE typename ei_traits<Derived>::Scalar
MatrixBase<Derived>::trace() const MatrixBase<Derived>::trace() const
{ {
return diagonal().sum(); return derived().diagonal().sum();
} }
#endif // EIGEN_REDUX_H #endif // EIGEN_REDUX_H