aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
diff options
context:
space:
mode:
authorGravatar Antonio Sanchez <cantonios@google.com>2020-12-02 14:00:57 -0800
committerGravatar Antonio Sanchez <cantonios@google.com>2020-12-04 10:16:29 -0800
commite2f21465fea76a80966f12a20d0be36597f19b44 (patch)
tree1ae9b0e3ae489b028902166a343f796d196fde82 /unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
parent305b8bd2777bda99f65791468f305b76021bf579 (diff)
Special function implementations for half/bfloat16 packets.
Current implementations fail to consider half-float packets, only half-float scalars. Added specializations for packets on AVX, AVX512 and NEON. Added tests to `special_packetmath`. The current `special_functions` tests would fail for half and bfloat16 due to lack of precision. The NEON tests also fail with precision issues and due to different handling of `sqrt(inf)`, so special functions bessel, ndtri have been disabled. Tested with AVX, AVX512.
Diffstat (limited to 'unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h')
-rw-r--r--unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h36
1 files changed, 12 insertions, 24 deletions
diff --git a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
index efc6d9c8f..943d10f6a 100644
--- a/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
+++ b/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h
@@ -19,8 +19,7 @@ namespace internal {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_i0(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_i0; return generic_i0<Packet, ScalarType>::run(x);
+ return numext::bessel_i0(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -28,8 +27,7 @@ Packet pbessel_i0(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_i0e(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_i0e; return generic_i0e<Packet, ScalarType>::run(x);
+ return numext::bessel_i0e(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -37,8 +35,7 @@ Packet pbessel_i0e(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_i1(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_i1; return generic_i1<Packet, ScalarType>::run(x);
+ return numext::bessel_i1(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -46,8 +43,7 @@ Packet pbessel_i1(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_i1e(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_i1e; return generic_i1e<Packet, ScalarType>::run(x);
+ return numext::bessel_i1e(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -55,8 +51,7 @@ Packet pbessel_i1e(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_j0(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_j0; return generic_j0<Packet, ScalarType>::run(x);
+ return numext::bessel_j0(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -64,8 +59,7 @@ Packet pbessel_j0(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_j1(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_j1; return generic_j1<Packet, ScalarType>::run(x);
+ return numext::bessel_j1(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -73,8 +67,7 @@ Packet pbessel_j1(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_y0(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_y0; return generic_y0<Packet, ScalarType>::run(x);
+ return numext::bessel_y0(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -82,8 +75,7 @@ Packet pbessel_y0(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_y1(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_y1; return generic_y1<Packet, ScalarType>::run(x);
+ return numext::bessel_y1(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -91,8 +83,7 @@ Packet pbessel_y1(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_k0(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_k0; return generic_k0<Packet, ScalarType>::run(x);
+ return numext::bessel_k0(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -100,8 +91,7 @@ Packet pbessel_k0(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_k0e(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_k0e; return generic_k0e<Packet, ScalarType>::run(x);
+ return numext::bessel_k0e(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -109,8 +99,7 @@ Packet pbessel_k0e(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_k1(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_k1; return generic_k1<Packet, ScalarType>::run(x);
+ return numext::bessel_k1(x);
}
/** \internal \returns the exponentially scaled modified Bessel function of
@@ -118,8 +107,7 @@ Packet pbessel_k1(const Packet& x) {
template <typename Packet>
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Packet pbessel_k1e(const Packet& x) {
- typedef typename unpacket_traits<Packet>::type ScalarType;
- using internal::generic_k1e; return generic_k1e<Packet, ScalarType>::run(x);
+ return numext::bessel_k1e(x);
}
} // end namespace internal