mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-07-04 20:25:10 +08:00
Added support for computing cos, sin, tan, and tanh on GPU.
This commit is contained in:
parent
473c8380ea
commit
bf3f6688f0
@ -1023,21 +1023,6 @@ template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|||||||
double log(const double &x) { return ::log(x); }
|
double log(const double &x) { return ::log(x); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|
||||||
T tan(const T &x) {
|
|
||||||
EIGEN_USING_STD_MATH(tan);
|
|
||||||
return tan(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __CUDACC__
|
|
||||||
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|
||||||
float tan(const float &x) { return ::tanf(x); }
|
|
||||||
|
|
||||||
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|
||||||
double tan(const double &x) { return ::tan(x); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
typename NumTraits<T>::Real abs(const T &x) {
|
typename NumTraits<T>::Real abs(const T &x) {
|
||||||
@ -1068,6 +1053,65 @@ template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|||||||
double exp(const double &x) { return ::exp(x); }
|
double exp(const double &x) { return ::exp(x); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T cos(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(cos);
|
||||||
|
return cos(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float cos(const float &x) { return ::cosf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double cos(const double &x) { return ::cos(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T sin(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(sin);
|
||||||
|
return sin(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float sin(const float &x) { return ::sinf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double sin(const double &x) { return ::sin(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T tan(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(tan);
|
||||||
|
return tan(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float tan(const float &x) { return ::tanf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double tan(const double &x) { return ::tan(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T tanh(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(tanh);
|
||||||
|
return tanh(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float tanh(const float &x) { return ::tanhf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double tanh(const double &x) { return ::tanh(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
@ -361,7 +361,7 @@ struct functor_traits<scalar_rsqrt_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_cos_op {
|
template<typename Scalar> struct scalar_cos_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_cos_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_cos_op)
|
||||||
EIGEN_DEVICE_FUNC inline Scalar operator() (const Scalar& a) const { using std::cos; return cos(a); }
|
EIGEN_DEVICE_FUNC inline Scalar operator() (const Scalar& a) const { return numext::cos(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pcos(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pcos(a); }
|
||||||
};
|
};
|
||||||
@ -380,7 +380,7 @@ struct functor_traits<scalar_cos_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_sin_op {
|
template<typename Scalar> struct scalar_sin_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_sin_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_sin_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::sin; return sin(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::sin(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::psin(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::psin(a); }
|
||||||
};
|
};
|
||||||
@ -400,7 +400,7 @@ struct functor_traits<scalar_sin_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_tan_op {
|
template<typename Scalar> struct scalar_tan_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_tan_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_tan_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::tan; return tan(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::tan(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::ptan(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::ptan(a); }
|
||||||
};
|
};
|
||||||
@ -614,7 +614,7 @@ struct functor_traits<scalar_atan_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_tanh_op {
|
template<typename Scalar> struct scalar_tanh_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_tanh_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_tanh_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::tanh; return tanh(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::tanh(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::ptanh(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::ptanh(a); }
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user