From 6afea4683847f1408d6de72b886af59576c66c8d Mon Sep 17 00:00:00 2001 From: Eugene Brevdo Date: Wed, 2 Mar 2016 21:35:48 -0800 Subject: [PATCH 1/2] Add infinity() support to numext::numeric_limits, use it in lgamma. This makes the infinity access a __device__ function, removing nvcc warnings. --- Eigen/src/Core/NumTraits.h | 5 +++++ Eigen/src/Core/SpecialFunctions.h | 2 +- Eigen/src/Core/util/Meta.h | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Eigen/src/Core/NumTraits.h b/Eigen/src/Core/NumTraits.h index 2ea5eb272..6a596bb7d 100644 --- a/Eigen/src/Core/NumTraits.h +++ b/Eigen/src/Core/NumTraits.h @@ -90,6 +90,11 @@ template struct GenericNumTraits static inline T lowest() { return IsInteger ? (numext::numeric_limits::min)() : (-(numext::numeric_limits::max)()); } + + EIGEN_DEVICE_FUNC + static inline T infinity() { + return numext::numeric_limits::infinity(); + } }; template struct NumTraits : GenericNumTraits diff --git a/Eigen/src/Core/SpecialFunctions.h b/Eigen/src/Core/SpecialFunctions.h index 6b4598e3e..b02ad9a1f 100644 --- a/Eigen/src/Core/SpecialFunctions.h +++ b/Eigen/src/Core/SpecialFunctions.h @@ -283,7 +283,7 @@ struct digamma_impl { Scalar p, q, nz, s, w, y; bool negative; - const Scalar maxnum = std::numeric_limits::infinity(); + const Scalar maxnum = numext::numeric_limits::infinity(); const Scalar m_pi = 3.14159265358979323846; negative = 0; diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index b01437d88..1cab8278c 100644 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h @@ -147,6 +147,7 @@ template struct numeric_limits static T epsilon() { return 0; } static T (max)() { assert(false && "Highest not supported for this type"); } static T (min)() { assert(false && "Lowest not supported for this type"); } + static T infinity() { assert(false && "Infinity not supported for this type"); } }; template<> struct numeric_limits { @@ -156,6 +157,8 @@ template<> struct numeric_limits static float (max)() { return CUDART_MAX_NORMAL_F; } EIGEN_DEVICE_FUNC static float (min)() { return FLT_MIN; } + EIGEN_DEVICE_FUNC + static float infinity() { return CUDART_INF_F; } }; template<> struct numeric_limits { @@ -165,6 +168,8 @@ template<> struct numeric_limits static double (max)() { return DBL_MAX; } EIGEN_DEVICE_FUNC static double (min)() { return DBL_MIN; } + EIGEN_DEVICE_FUNC + static float infinity() { return CUDART_INF; } }; template<> struct numeric_limits { From ab3dc0b0fe64c34fab110f15914b0b9fcc0329da Mon Sep 17 00:00:00 2001 From: Eugene Brevdo Date: Wed, 2 Mar 2016 21:48:46 -0800 Subject: [PATCH 2/2] Small bugfix to numeric_limits for CUDA. --- Eigen/src/Core/util/Meta.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index 1cab8278c..6b35179f2 100644 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h @@ -169,7 +169,7 @@ template<> struct numeric_limits EIGEN_DEVICE_FUNC static double (min)() { return DBL_MIN; } EIGEN_DEVICE_FUNC - static float infinity() { return CUDART_INF; } + static double infinity() { return CUDART_INF; } }; template<> struct numeric_limits {