From 509e4ddc02e0d70b8c1ee325f3b18624d4235c1e Mon Sep 17 00:00:00 2001 From: Benoit Steiner Date: Wed, 19 Nov 2014 10:34:11 -0800 Subject: [PATCH] Added reduction packet primitives for CUDA --- Eigen/src/Core/arch/CUDA/PacketMath.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Eigen/src/Core/arch/CUDA/PacketMath.h b/Eigen/src/Core/arch/CUDA/PacketMath.h index 7b481d512..19749c832 100644 --- a/Eigen/src/Core/arch/CUDA/PacketMath.h +++ b/Eigen/src/Core/arch/CUDA/PacketMath.h @@ -223,6 +223,27 @@ template<> EIGEN_DEVICE_FUNC inline double pfirst(const double2& a) { return a.x; } +template<> EIGEN_DEVICE_FUNC inline float predux(const float4& a) { + return a.x + a.y + a.z + a.w; +} +template<> EIGEN_DEVICE_FUNC inline double predux(const double2& a) { + return a.x + a.y; +} + +template<> EIGEN_DEVICE_FUNC inline float predux_max(const float4& a) { + return fmaxf(fmaxf(a.x, a.y), fmaxf(a.z, a.w)); +} +template<> EIGEN_DEVICE_FUNC inline double predux_max(const double2& a) { + return fmax(a.x, a.y); +} + +template<> EIGEN_DEVICE_FUNC inline float predux_min(const float4& a) { + return fminf(fminf(a.x, a.y), fminf(a.z, a.w)); +} +template<> EIGEN_DEVICE_FUNC inline double predux_min(const double2& a) { + return fmin(a.x, a.y); +} + template<> EIGEN_DEVICE_FUNC inline float4 pabs(const float4& a) { return make_float4(fabs(a.x), fabs(a.y), fabs(a.z), fabs(a.w)); }