From d94f6ba9659f8c953caaff854552070ce149958b Mon Sep 17 00:00:00 2001 From: Benoit Steiner Date: Fri, 25 Mar 2016 11:02:56 -0700 Subject: Started to model the cost of divisions more accurately. --- Eigen/src/Core/NumTraits.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'Eigen/src/Core/NumTraits.h') diff --git a/Eigen/src/Core/NumTraits.h b/Eigen/src/Core/NumTraits.h index 7ddb4a867..b7b5e7d22 100644 --- a/Eigen/src/Core/NumTraits.h +++ b/Eigen/src/Core/NumTraits.h @@ -60,6 +60,23 @@ template struct GenericNumTraits MulCost = 1 }; + // Division is messy but important, because it is expensive and throughput + // varies significantly. The following numbers are based on min division + // throughput on Haswell. + template + struct Div { + enum { +#ifdef EIGEN_VECTORIZE_AVX + AVX = true, +#else + AVX = false, +#endif + Cost = IsInteger ? (sizeof(T) == 8 ? (IsSigned ? 24 : 21) : (IsSigned ? 8 : 9)): + Vectorized ? (sizeof(T) == 8 ? (AVX ? 16 : 8) : (AVX ? 14 : 7)) : 8 + }; + }; + + typedef T Real; typedef typename internal::conditional< IsInteger, -- cgit v1.2.3