Fix AVX512 math function consistency, enable for ICC.

This commit is contained in:
Antonio Sánchez 2022-02-04 19:35:18 +00:00 committed by Rasmus Munk Larsen
parent cafeadffef
commit 96da541cba
2 changed files with 17 additions and 14 deletions

View File

@ -17,7 +17,8 @@ namespace Eigen {
namespace internal { namespace internal {
// Disable the code for older versions of gcc that don't support many of the required avx512 instrinsics. // Disable the code for older versions of gcc that don't support many of the required avx512 instrinsics.
#if EIGEN_GNUC_AT_LEAST(5, 3) || EIGEN_COMP_CLANG || EIGEN_COMP_MSVC >= 1923 #if EIGEN_GNUC_AT_LEAST(5, 3) || EIGEN_COMP_CLANG || EIGEN_COMP_MSVC >= 1923 || EIGEN_COMP_ICC >= 1900
#define EIGEN_HAS_AVX512_MATH 1
#define EIGEN_DECLARE_CONST_Packet16f(NAME, X) \ #define EIGEN_DECLARE_CONST_Packet16f(NAME, X) \
const Packet16f p16f_##NAME = pset1<Packet16f>(X) const Packet16f p16f_##NAME = pset1<Packet16f>(X)
@ -326,7 +327,9 @@ Packet16f pexpm1<Packet16f>(const Packet16f& _x) {
F16_PACKET_FUNCTION(Packet16f, Packet16h, pexpm1) F16_PACKET_FUNCTION(Packet16f, Packet16h, pexpm1)
BF16_PACKET_FUNCTION(Packet16f, Packet16bf, pexpm1) BF16_PACKET_FUNCTION(Packet16f, Packet16bf, pexpm1)
#endif #else
#define EIGEN_HAS_AVX512_MATH 0
#endif // EIGEN_HAS_AVX512_MATH
template <> template <>

View File

@ -74,12 +74,14 @@ struct packet_traits<half> : default_packet_traits {
HasMax = 1, HasMax = 1,
HasConj = 1, HasConj = 1,
HasSetLinear = 0, HasSetLinear = 0,
HasLog = 1, HasLog = EIGEN_HAS_AVX512_MATH,
HasLog1p = 1, HasLog1p = EIGEN_HAS_AVX512_MATH,
HasExpm1 = 1, HasExp = EIGEN_HAS_AVX512_MATH,
HasExp = 1, HasExpm1 = EIGEN_HAS_AVX512_MATH,
HasSqrt = 1, HasSqrt = EIGEN_HAS_AVX512_MATH,
HasRsqrt = 1, HasRsqrt = EIGEN_HAS_AVX512_MATH,
HasBessel = EIGEN_HAS_AVX512_MATH,
HasNdtri = EIGEN_HAS_AVX512_MATH,
HasSin = EIGEN_FAST_MATH, HasSin = EIGEN_FAST_MATH,
HasCos = EIGEN_FAST_MATH, HasCos = EIGEN_FAST_MATH,
HasTanh = EIGEN_FAST_MATH, HasTanh = EIGEN_FAST_MATH,
@ -88,9 +90,7 @@ struct packet_traits<half> : default_packet_traits {
HasRound = 1, HasRound = 1,
HasFloor = 1, HasFloor = 1,
HasCeil = 1, HasCeil = 1,
HasRint = 1, HasRint = 1
HasBessel = 1,
HasNdtri = 1
}; };
}; };
@ -111,7 +111,7 @@ template<> struct packet_traits<float> : default_packet_traits
HasBlend = 0, HasBlend = 0,
HasSin = EIGEN_FAST_MATH, HasSin = EIGEN_FAST_MATH,
HasCos = EIGEN_FAST_MATH, HasCos = EIGEN_FAST_MATH,
#if EIGEN_GNUC_AT_LEAST(5, 3) || (!EIGEN_COMP_GNUC_STRICT) #if EIGEN_HAS_AVX512_MATH
HasLog = 1, HasLog = 1,
HasLog1p = 1, HasLog1p = 1,
HasExpm1 = 1, HasExpm1 = 1,
@ -141,7 +141,7 @@ template<> struct packet_traits<double> : default_packet_traits
AlignedOnScalar = 1, AlignedOnScalar = 1,
size = 8, size = 8,
HasHalfPacket = 1, HasHalfPacket = 1,
#if EIGEN_GNUC_AT_LEAST(5, 3) || (!EIGEN_COMP_GNUC_STRICT) #if EIGEN_HAS_AVX512_MATH
HasLog = 1, HasLog = 1,
HasExp = 1, HasExp = 1,
HasSqrt = EIGEN_FAST_MATH, HasSqrt = EIGEN_FAST_MATH,
@ -2175,7 +2175,7 @@ struct packet_traits<bfloat16> : default_packet_traits {
HasInsert = 1, HasInsert = 1,
HasSin = EIGEN_FAST_MATH, HasSin = EIGEN_FAST_MATH,
HasCos = EIGEN_FAST_MATH, HasCos = EIGEN_FAST_MATH,
#if EIGEN_GNUC_AT_LEAST(5, 3) || (!EIGEN_COMP_GNUC_STRICT) #if EIGEN_HAS_AVX512_MATH
#ifdef EIGEN_VECTORIZE_AVX512DQ #ifdef EIGEN_VECTORIZE_AVX512DQ
HasLog = 1, // Currently fails test with bad accuracy. HasLog = 1, // Currently fails test with bad accuracy.
HasLog1p = 1, HasLog1p = 1,