diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-10-08 17:27:01 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-10-08 17:27:01 +0200 |
commit | dd934ad057e5ad5a5bc9e9a2b4340b4ac16c01d3 (patch) | |
tree | f06adf835fff6b32ee12f11cd1b66e16bdb8fa8f /Eigen/src/Core | |
parent | f6f6f50272164a523126f5371ac51a2c8f5bae8e (diff) |
Re-enable vectorization of LinSpaced, plus some cleaning
Diffstat (limited to 'Eigen/src/Core')
-rw-r--r-- | Eigen/src/Core/CoreEvaluators.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/GeneralProduct.h | 14 | ||||
-rw-r--r-- | Eigen/src/Core/Inverse.h | 2 | ||||
-rwxr-xr-x | Eigen/src/Core/ProductEvaluators.h | 2 | ||||
-rw-r--r-- | Eigen/src/Core/functors/NullaryFunctors.h | 3 |
5 files changed, 10 insertions, 15 deletions
diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h index 74908bd45..c0563f534 100644 --- a/Eigen/src/Core/CoreEvaluators.h +++ b/Eigen/src/Core/CoreEvaluators.h @@ -321,8 +321,8 @@ struct evaluator<CwiseNullaryOp<NullaryOp,PlainObjectType> > & ( HereditaryBits | (functor_has_linear_access<NullaryOp>::ret ? LinearAccessBit : 0) | (functor_traits<NullaryOp>::PacketAccess ? PacketAccessBit : 0))) - | (functor_traits<NullaryOp>::IsRepeatable ? 0 : EvalBeforeNestingBit), // FIXME EvalBeforeNestingBit should be needed anymore - Alignment = 0 // FIXME alignment should not matter here, perhaps we could set it to AlignMax?? + | (functor_traits<NullaryOp>::IsRepeatable ? 0 : EvalBeforeNestingBit), + Alignment = AlignedMax }; EIGEN_DEVICE_FUNC explicit evaluator(const XprType& n) diff --git a/Eigen/src/Core/GeneralProduct.h b/Eigen/src/Core/GeneralProduct.h index 475d6f4aa..4a5054592 100644 --- a/Eigen/src/Core/GeneralProduct.h +++ b/Eigen/src/Core/GeneralProduct.h @@ -160,7 +160,7 @@ template<> struct product_type_selector<Large,Large,Small> { enum namespace internal { template<int Side, int StorageOrder, bool BlasCompatible> -struct gemv_dense_sense_selector; +struct gemv_dense_selector; } // end namespace internal @@ -204,19 +204,19 @@ struct gemv_static_vector_if<Scalar,Size,MaxSize,true> // The vector is on the left => transposition template<int StorageOrder, bool BlasCompatible> -struct gemv_dense_sense_selector<OnTheLeft,StorageOrder,BlasCompatible> +struct gemv_dense_selector<OnTheLeft,StorageOrder,BlasCompatible> { template<typename Lhs, typename Rhs, typename Dest> static void run(const Lhs &lhs, const Rhs &rhs, Dest& dest, const typename Dest::Scalar& alpha) { Transpose<Dest> destT(dest); enum { OtherStorageOrder = StorageOrder == RowMajor ? ColMajor : RowMajor }; - gemv_dense_sense_selector<OnTheRight,OtherStorageOrder,BlasCompatible> + gemv_dense_selector<OnTheRight,OtherStorageOrder,BlasCompatible> ::run(rhs.transpose(), lhs.transpose(), destT, alpha); } }; -template<> struct gemv_dense_sense_selector<OnTheRight,ColMajor,true> +template<> struct gemv_dense_selector<OnTheRight,ColMajor,true> { template<typename Lhs, typename Rhs, typename Dest> static inline void run(const Lhs &lhs, const Rhs &rhs, Dest& dest, const typename Dest::Scalar& alpha) @@ -292,7 +292,7 @@ template<> struct gemv_dense_sense_selector<OnTheRight,ColMajor,true> } }; -template<> struct gemv_dense_sense_selector<OnTheRight,RowMajor,true> +template<> struct gemv_dense_selector<OnTheRight,RowMajor,true> { template<typename Lhs, typename Rhs, typename Dest> static void run(const Lhs &lhs, const Rhs &rhs, Dest& dest, const typename Dest::Scalar& alpha) @@ -345,7 +345,7 @@ template<> struct gemv_dense_sense_selector<OnTheRight,RowMajor,true> } }; -template<> struct gemv_dense_sense_selector<OnTheRight,ColMajor,false> +template<> struct gemv_dense_selector<OnTheRight,ColMajor,false> { template<typename Lhs, typename Rhs, typename Dest> static void run(const Lhs &lhs, const Rhs &rhs, Dest& dest, const typename Dest::Scalar& alpha) @@ -357,7 +357,7 @@ template<> struct gemv_dense_sense_selector<OnTheRight,ColMajor,false> } }; -template<> struct gemv_dense_sense_selector<OnTheRight,RowMajor,false> +template<> struct gemv_dense_selector<OnTheRight,RowMajor,false> { template<typename Lhs, typename Rhs, typename Dest> static void run(const Lhs &lhs, const Rhs &rhs, Dest& dest, const typename Dest::Scalar& alpha) diff --git a/Eigen/src/Core/Inverse.h b/Eigen/src/Core/Inverse.h index b359e1287..8e6b275f7 100644 --- a/Eigen/src/Core/Inverse.h +++ b/Eigen/src/Core/Inverse.h @@ -12,8 +12,6 @@ namespace Eigen { -// TODO move the general declaration in Core, and rename this file DenseInverseImpl.h, or something like this... - template<typename XprType,typename StorageKind> class InverseImpl; namespace internal { diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h index 529870300..c2a7314bd 100755 --- a/Eigen/src/Core/ProductEvaluators.h +++ b/Eigen/src/Core/ProductEvaluators.h @@ -313,7 +313,7 @@ struct generic_product_impl<Lhs,Rhs,DenseShape,DenseShape,GemvProduct> template<typename Dest> static void scaleAndAddTo(Dest& dst, const Lhs& lhs, const Rhs& rhs, const Scalar& alpha) { - internal::gemv_dense_sense_selector<Side, + internal::gemv_dense_selector<Side, (int(MatrixType::Flags)&RowMajorBit) ? RowMajor : ColMajor, bool(internal::blas_traits<MatrixType>::HasUsableDirectAccess) >::run(lhs, rhs, dst, alpha); diff --git a/Eigen/src/Core/functors/NullaryFunctors.h b/Eigen/src/Core/functors/NullaryFunctors.h index 130f20868..55d45f26f 100644 --- a/Eigen/src/Core/functors/NullaryFunctors.h +++ b/Eigen/src/Core/functors/NullaryFunctors.h @@ -26,7 +26,6 @@ struct scalar_constant_op { }; template<typename Scalar> struct functor_traits<scalar_constant_op<Scalar> > -// FIXME replace this packet test by a safe one { enum { Cost = 1, PacketAccess = packet_traits<Scalar>::Vectorizable, IsRepeatable = true }; }; template<typename Scalar> struct scalar_identity_op { @@ -135,14 +134,12 @@ template <typename Scalar, typename PacketType, bool RandomAccess> struct linspa // This proxy object handles the actual required temporaries, the different // implementations (random vs. sequential access) as well as the // correct piping to size 2/4 packet operations. - // TODO find a way to make the packet type configurable const linspaced_op_impl<Scalar,PacketType,RandomAccess> impl; }; // all functors allow linear access, except scalar_identity_op. So we fix here a quick meta // to indicate whether a functor allows linear access, just always answering 'yes' except for // scalar_identity_op. -// FIXME move this to functor_traits adding a functor_default template<typename Functor> struct functor_has_linear_access { enum { ret = 1 }; }; template<typename Scalar> struct functor_has_linear_access<scalar_identity_op<Scalar> > { enum { ret = 0 }; }; |