From 3504ae47ca7a2a712155c48e13bb4168cdebd5a6 Mon Sep 17 00:00:00 2001 From: Benoit Steiner Date: Mon, 21 Dec 2015 15:20:06 -0800 Subject: [PATCH] Made it possible to run the lgamma, erf, and erfc functors on a CUDA gpu. --- Eigen/src/Core/functors/UnaryFunctors.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Eigen/src/Core/functors/UnaryFunctors.h b/Eigen/src/Core/functors/UnaryFunctors.h index 6891cfdda..01727f250 100644 --- a/Eigen/src/Core/functors/UnaryFunctors.h +++ b/Eigen/src/Core/functors/UnaryFunctors.h @@ -415,7 +415,7 @@ template struct scalar_lgamma_op { using numext::lgamma; return lgamma(a); } typedef typename packet_traits::type Packet; - inline Packet packetOp(const Packet& a) const { return internal::plgamma(a); } + EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::plgamma(a); } }; template struct functor_traits > @@ -438,7 +438,7 @@ template struct scalar_erf_op { using numext::erf; return erf(a); } typedef typename packet_traits::type Packet; - inline Packet packetOp(const Packet& a) const { return internal::perf(a); } + EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::perf(a); } }; template struct functor_traits > @@ -461,7 +461,7 @@ template struct scalar_erfc_op { using numext::erfc; return erfc(a); } typedef typename packet_traits::type Packet; - inline Packet packetOp(const Packet& a) const { return internal::perfc(a); } + EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::perfc(a); } }; template struct functor_traits > @@ -732,10 +732,10 @@ struct functor_traits > { * \sa class CwiseUnaryOp, Cwise::sign() */ template::IsComplex!=0) > struct scalar_sign_op; -template +template struct scalar_sign_op { EIGEN_EMPTY_STRUCT_CTOR(scalar_sign_op) - EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const + EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return Scalar( (a>Scalar(0)) - (a { //template //EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::psign(a); } }; -template +template struct scalar_sign_op { EIGEN_EMPTY_STRUCT_CTOR(scalar_sign_op) - EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const + EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { using std::abs; typedef typename NumTraits::Real real_type; real_type aa = abs(a); if (aa==0) - return Scalar(0); - aa = 1./aa; + return Scalar(0); + aa = 1./aa; return Scalar(real(a)*aa, imag(a)*aa ); } //TODO