mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-01-24 14:45:14 +08:00
Improved support for trigonometric functions on GPU
This commit is contained in:
parent
d6105b53b8
commit
10b69810d1
@ -1098,6 +1098,82 @@ template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|||||||
double tan(const double &x) { return ::tan(x); }
|
double tan(const double &x) { return ::tan(x); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T acos(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(acos);
|
||||||
|
return acos(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float acos(const float &x) { return ::acosf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double acos(const double &x) { return ::acos(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T asin(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(asin);
|
||||||
|
return asin(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float asin(const float &x) { return ::asinf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double asin(const double &x) { return ::asin(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T atan(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(atan);
|
||||||
|
return atan(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float atan(const float &x) { return ::atanf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double atan(const double &x) { return ::atan(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T cosh(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(cosh);
|
||||||
|
return cosh(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float cosh(const float &x) { return ::coshf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double cosh(const double &x) { return ::cosh(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
T sinh(const T &x) {
|
||||||
|
EIGEN_USING_STD_MATH(sinh);
|
||||||
|
return sinh(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __CUDACC__
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
float sinh(const float &x) { return ::sinhf(x); }
|
||||||
|
|
||||||
|
template<> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
|
double sinh(const double &x) { return ::sinh(x); }
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
||||||
T tanh(const T &x) {
|
T tanh(const T &x) {
|
||||||
|
@ -419,7 +419,7 @@ struct functor_traits<scalar_tan_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_acos_op {
|
template<typename Scalar> struct scalar_acos_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_acos_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_acos_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::acos; return acos(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::acos(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pacos(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pacos(a); }
|
||||||
};
|
};
|
||||||
@ -438,7 +438,7 @@ struct functor_traits<scalar_acos_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_asin_op {
|
template<typename Scalar> struct scalar_asin_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_asin_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_asin_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::asin; return asin(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::asin(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pasin(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pasin(a); }
|
||||||
};
|
};
|
||||||
@ -594,7 +594,7 @@ struct functor_traits<scalar_erfc_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_atan_op {
|
template<typename Scalar> struct scalar_atan_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_atan_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_atan_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::atan; return atan(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::atan(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::patan(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::patan(a); }
|
||||||
};
|
};
|
||||||
@ -649,7 +649,7 @@ struct functor_traits<scalar_tanh_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_sinh_op {
|
template<typename Scalar> struct scalar_sinh_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_sinh_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_sinh_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::sinh; return sinh(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::sinh(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::psinh(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::psinh(a); }
|
||||||
};
|
};
|
||||||
@ -668,7 +668,7 @@ struct functor_traits<scalar_sinh_op<Scalar> >
|
|||||||
*/
|
*/
|
||||||
template<typename Scalar> struct scalar_cosh_op {
|
template<typename Scalar> struct scalar_cosh_op {
|
||||||
EIGEN_EMPTY_STRUCT_CTOR(scalar_cosh_op)
|
EIGEN_EMPTY_STRUCT_CTOR(scalar_cosh_op)
|
||||||
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::cosh; return cosh(a); }
|
EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::cosh(a); }
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pcosh(a); }
|
EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pcosh(a); }
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user