diff options
author | Gael Guennebaud <g.gael@free.fr> | 2013-02-07 19:06:14 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2013-02-07 19:06:14 +0100 |
commit | 5adcc6c7b48b7a213af91bc123a02ab87751228e (patch) | |
tree | 5e0ee840a8fb9acbbb48c5c48f1bffe0ca3cfe2a /Eigen/src/Core/Assign.h | |
parent | e4ec63aee7233f5b934abc0b1d9ceada79a844ee (diff) |
Add support for NVCC5: most of the Core and part of LU are callable from CUDA code.
Still a lot to do.
Diffstat (limited to 'Eigen/src/Core/Assign.h')
-rw-r--r-- | Eigen/src/Core/Assign.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Eigen/src/Core/Assign.h b/Eigen/src/Core/Assign.h index cd29a88f0..dc9b55fa4 100644 --- a/Eigen/src/Core/Assign.h +++ b/Eigen/src/Core/Assign.h @@ -139,6 +139,7 @@ struct assign_DefaultTraversal_CompleteUnrolling inner = Index % Derived1::InnerSizeAtCompileTime }; + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) { dst.copyCoeffByOuterInner(outer, inner, src); @@ -149,12 +150,14 @@ struct assign_DefaultTraversal_CompleteUnrolling template<typename Derived1, typename Derived2, int Stop> struct assign_DefaultTraversal_CompleteUnrolling<Derived1, Derived2, Stop, Stop> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {} }; template<typename Derived1, typename Derived2, int Index, int Stop> struct assign_DefaultTraversal_InnerUnrolling { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src, int outer) { dst.copyCoeffByOuterInner(outer, Index, src); @@ -165,6 +168,7 @@ struct assign_DefaultTraversal_InnerUnrolling template<typename Derived1, typename Derived2, int Stop> struct assign_DefaultTraversal_InnerUnrolling<Derived1, Derived2, Stop, Stop> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &, int) {} }; @@ -175,6 +179,7 @@ struct assign_DefaultTraversal_InnerUnrolling<Derived1, Derived2, Stop, Stop> template<typename Derived1, typename Derived2, int Index, int Stop> struct assign_LinearTraversal_CompleteUnrolling { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) { dst.copyCoeff(Index, src); @@ -185,6 +190,7 @@ struct assign_LinearTraversal_CompleteUnrolling template<typename Derived1, typename Derived2, int Stop> struct assign_LinearTraversal_CompleteUnrolling<Derived1, Derived2, Stop, Stop> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &, const Derived2 &) {} }; @@ -249,6 +255,7 @@ struct assign_impl; template<typename Derived1, typename Derived2, int Unrolling, int Version> struct assign_impl<Derived1, Derived2, InvalidTraversal, Unrolling, Version> { + EIGEN_DEVICE_FUNC static inline void run(Derived1 &, const Derived2 &) { } }; @@ -256,6 +263,7 @@ template<typename Derived1, typename Derived2, int Version> struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling, Version> { typedef typename Derived1::Index Index; + EIGEN_DEVICE_FUNC static inline void run(Derived1 &dst, const Derived2 &src) { const Index innerSize = dst.innerSize(); @@ -269,6 +277,7 @@ struct assign_impl<Derived1, Derived2, DefaultTraversal, NoUnrolling, Version> template<typename Derived1, typename Derived2, int Version> struct assign_impl<Derived1, Derived2, DefaultTraversal, CompleteUnrolling, Version> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) { assign_DefaultTraversal_CompleteUnrolling<Derived1, Derived2, 0, Derived1::SizeAtCompileTime> @@ -280,6 +289,7 @@ template<typename Derived1, typename Derived2, int Version> struct assign_impl<Derived1, Derived2, DefaultTraversal, InnerUnrolling, Version> { typedef typename Derived1::Index Index; + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) { const Index outerSize = dst.outerSize(); @@ -297,6 +307,7 @@ template<typename Derived1, typename Derived2, int Version> struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling, Version> { typedef typename Derived1::Index Index; + EIGEN_DEVICE_FUNC static inline void run(Derived1 &dst, const Derived2 &src) { const Index size = dst.size(); @@ -308,6 +319,7 @@ struct assign_impl<Derived1, Derived2, LinearTraversal, NoUnrolling, Version> template<typename Derived1, typename Derived2, int Version> struct assign_impl<Derived1, Derived2, LinearTraversal, CompleteUnrolling, Version> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(Derived1 &dst, const Derived2 &src) { assign_LinearTraversal_CompleteUnrolling<Derived1, Derived2, 0, Derived1::SizeAtCompileTime> @@ -519,18 +531,22 @@ struct assign_selector; template<typename Derived, typename OtherDerived> struct assign_selector<Derived,OtherDerived,false,false> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.derived()); } }; template<typename Derived, typename OtherDerived> struct assign_selector<Derived,OtherDerived,true,false> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.eval()); } }; template<typename Derived, typename OtherDerived> struct assign_selector<Derived,OtherDerived,false,true> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose()); } }; template<typename Derived, typename OtherDerived> struct assign_selector<Derived,OtherDerived,true,true> { + EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose().eval()); } }; |