* Started support for unaligned vectorization.

* Introduce a new highly optimized matrix-matrix product for large
  matrices. The code is still highly experimental and it is activated
  only if you define EIGEN_WIP_PRODUCT at compile time.
  Currently the third dimension of the product must be a factor of
  the packet size (x4 for floats) and the right handed side matrix
  must be column major.
  Moreover, currently c = a*b; actually computes c += a*b !!
  Therefore, the code is provided for experimentation purpose only !
  These limitations will be fixed soon or later to become the default
  product implementation.
This commit is contained in:
Gael Guennebaud
2008-05-05 10:23:29 +00:00
parent 8c6007f80e
commit 46fa4c713f
15 changed files with 663 additions and 79 deletions

View File

@@ -7,6 +7,7 @@
#define EIGEN_VECTORIZE_SSE
#include <emmintrin.h>
#include <xmmintrin.h>
#include <pmmintrin.h>
#endif
#ifdef __ALTIVEC__ // There are zero chances of both __SSE2__ AND __ALTIVEC__ been defined
#define EIGEN_VECTORIZE
@@ -18,17 +19,16 @@
#endif
#include <cstdlib>
#include <cmath>
#include <complex>
#include <cassert>
#include <iostream>
#ifdef EIGEN_VECTORIZE
// it seems we cannot assume posix_memalign is defined in the stdlib header
extern "C" int posix_memalign (void **, size_t, size_t) throw ();
#endif
#include <cmath>
#include <complex>
#include <cassert>
#include <iostream>
namespace Eigen {
#include "src/Core/util/Macros.h"
@@ -50,7 +50,11 @@ namespace Eigen {
#include "src/Core/CwiseBinaryOp.h"
#include "src/Core/CwiseUnaryOp.h"
#include "src/Core/CwiseNullaryOp.h"
#ifdef EIGEN_WIP_PRODUCT
#include "src/Core/ProductWIP.h"
#else
#include "src/Core/Product.h"
#endif
#include "src/Core/Block.h"
#include "src/Core/Minor.h"
#include "src/Core/Transpose.h"