Added initial experimental support for explicit vectorization.

Currently only the following platform/operations are supported:
 - SSE2 compatible architecture
 - compiler compatible with intel's SSE2 intrinsics
 - float, double and int data types
 - fixed size matrices with a storage major dimension multiple of 4 (or 2 for double)
 - scalar-matrix product, component wise: +,-,*,min,max
 - matrix-matrix product only if the left matrix is vectorizable and column major
   or the right matrix is vectorizable and row major, e.g.:
   a.transpose() * b is not vectorized with the default column major storage.
To use it you must define EIGEN_VECTORIZE and EIGEN_INTEL_PLATFORM.
This commit is contained in:
Gael Guennebaud
2008-04-09 12:31:55 +00:00
parent 4920f2011e
commit 1985fb0551
25 changed files with 436 additions and 93 deletions

View File

@@ -57,7 +57,6 @@ template<> struct NumTraits<int>
ReadCost = 1,
AddCost = 1,
MulCost = 1,
PacketSize = 4
};
};
@@ -71,7 +70,6 @@ template<> struct NumTraits<float>
ReadCost = 1,
AddCost = 1,
MulCost = 1,
PacketSize = 4
};
};
@@ -85,7 +83,6 @@ template<> struct NumTraits<double>
ReadCost = 1,
AddCost = 1,
MulCost = 1,
PacketSize = 2
};
};
@@ -99,7 +96,6 @@ template<typename _Real> struct NumTraits<std::complex<_Real> >
ReadCost = 2,
AddCost = 2 * NumTraits<Real>::AddCost,
MulCost = 4 * NumTraits<Real>::MulCost + 2 * NumTraits<Real>::AddCost,
PacketSize = 0
};
};
@@ -113,7 +109,6 @@ template<> struct NumTraits<long long int>
ReadCost = 1,
AddCost = 1,
MulCost = 1,
PacketSize = 0
};
};
@@ -127,7 +122,6 @@ template<> struct NumTraits<long double>
ReadCost = 1,
AddCost = 2,
MulCost = 2,
PacketSize = 0
};
};
@@ -141,7 +135,6 @@ template<> struct NumTraits<bool>
ReadCost = 1,
AddCost = 1,
MulCost = 1,
PacketSize = 0
};
};