aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/NumTraits.h
diff options
context:
space:
mode:
authorGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2016-03-25 11:02:56 -0700
committerGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2016-03-25 11:02:56 -0700
commitd94f6ba9659f8c953caaff854552070ce149958b (patch)
tree0f48a08cae1d45e17b3e198c3086d82020454245 /Eigen/src/Core/NumTraits.h
parenta86c9f037b24312863ad2a74a583369581c6e21a (diff)
Started to model the cost of divisions more accurately.
Diffstat (limited to 'Eigen/src/Core/NumTraits.h')
-rw-r--r--Eigen/src/Core/NumTraits.h17
1 files changed, 17 insertions, 0 deletions
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<typename T> 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<bool Vectorized>
+ 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,