10 #ifndef EIGEN_CUDA_SPECIALFUNCTIONS_H 11 #define EIGEN_CUDA_SPECIALFUNCTIONS_H 20 #if defined(__CUDACC__) && defined(EIGEN_USE_GPU) 22 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
23 float4 plgamma<float4>(
const float4& a)
25 return make_float4(lgammaf(a.x), lgammaf(a.y), lgammaf(a.z), lgammaf(a.w));
28 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
29 double2 plgamma<double2>(
const double2& a)
32 return make_double2(lgamma(a.x), lgamma(a.y));
35 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
36 float4 pdigamma<float4>(
const float4& a)
38 using numext::digamma;
39 return make_float4(digamma(a.x), digamma(a.y), digamma(a.z), digamma(a.w));
42 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
43 double2 pdigamma<double2>(
const double2& a)
45 using numext::digamma;
46 return make_double2(digamma(a.x), digamma(a.y));
49 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
50 float4 pzeta<float4>(
const float4& x,
const float4& q)
53 return make_float4(
zeta(x.x, q.x),
zeta(x.y, q.y),
zeta(x.z, q.z),
zeta(x.w, q.w));
56 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
57 double2 pzeta<double2>(
const double2& x,
const double2& q)
60 return make_double2(
zeta(x.x, q.x),
zeta(x.y, q.y));
63 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
64 float4 ppolygamma<float4>(
const float4& n,
const float4& x)
66 using numext::polygamma;
70 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
71 double2 ppolygamma<double2>(
const double2& n,
const double2& x)
73 using numext::polygamma;
77 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
78 float4 perf<float4>(
const float4& a)
80 return make_float4(erff(a.x), erff(a.y), erff(a.z), erff(a.w));
83 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
84 double2 perf<double2>(
const double2& a)
87 return make_double2(erf(a.x), erf(a.y));
90 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
91 float4 perfc<float4>(
const float4& a)
94 return make_float4(erfc(a.x), erfc(a.y), erfc(a.z), erfc(a.w));
97 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
98 double2 perfc<double2>(
const double2& a)
101 return make_double2(erfc(a.x), erfc(a.y));
105 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
106 float4 pigamma<float4>(
const float4& a,
const float4& x)
108 using numext::igamma;
116 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
117 double2 pigamma<double2>(
const double2& a,
const double2& x)
119 using numext::igamma;
120 return make_double2(
igamma(a.x, x.x),
igamma(a.y, x.y));
123 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
124 float4 pigammac<float4>(
const float4& a,
const float4& x)
126 using numext::igammac;
134 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
135 double2 pigammac<double2>(
const double2& a,
const double2& x)
137 using numext::igammac;
141 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
142 float4 pbetainc<float4>(
const float4& a,
const float4& b,
const float4& x)
144 using numext::betainc;
152 template<> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
153 double2 pbetainc<double2>(
const double2& a,
const double2& b,
const double2& x)
155 using numext::betainc;
156 return make_double2(
betainc(a.x, b.x, x.x),
betainc(a.y, b.y, x.y));
165 #endif // EIGEN_CUDA_SPECIALFUNCTIONS_H Namespace containing all symbols from the Eigen library.
Definition: AdolcForward:45
const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igammac_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igammac(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:48
const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igamma_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igamma(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:28
const TensorCwiseTernaryOp< internal::scalar_betainc_op< typename XDerived::Scalar >, const ADerived, const BDerived, const XDerived > betainc(const ADerived &a, const BDerived &b, const XDerived &x)
Definition: TensorGlobalFunctions.h:24
const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:114
const Eigen::CwiseBinaryOp< Eigen::internal::scalar_polygamma_op< typename DerivedX::Scalar >, const DerivedN, const DerivedX > polygamma(const Eigen::ArrayBase< DerivedN > &n, const Eigen::ArrayBase< DerivedX > &x)
Definition: SpecialFunctionsArrayAPI.h:70