- cleaner use of OpenMP (no code duplication anymore)

using a macro and _Pragma.
- use OpenMP also in cacheOptimalProduct and in the
  vectorized paths as well
- kill the vector assignment unroller. implement in
  operator= the logic for assigning a row-vector in
  a col-vector.
- CMakeLists support for building tests/examples
  with -fopenmp and/or -msse2
- updates in bench/, especially replace identity()
  by ones() which prevents underflows from perturbing
  bench results.
This commit is contained in:
Benoit Jacob
2008-04-11 14:28:42 +00:00
parent 7bee90a62a
commit dcebc46cdc
8 changed files with 179 additions and 231 deletions

View File

@@ -74,6 +74,30 @@ using Eigen::MatrixBase;
#define EIGEN_ONLY_USED_FOR_DEBUG(x)
#endif
#ifdef EIGEN_USE_OPENMP
# ifdef __INTEL_COMPILER
# define EIGEN_PRAGMA_OMP_PARALLEL _Pragma("omp parallel default(none) shared(other)")
# else
# define EIGEN_PRAGMA_OMP_PARALLEL _Pragma("omp parallel default(none)")
# endif
# define EIGEN_RUN_PARALLELIZABLE_LOOP(condition) \
if(condition) \
{ \
EIGEN_PRAGMA_OMP_PARALLEL \
{ \
_Pragma("omp for") \
EIGEN_THE_PARALLELIZABLE_LOOP \
} \
} \
else \
{ \
EIGEN_THE_PARALLELIZABLE_LOOP \
}
#else // EIGEN_USE_OPENMP
# define EIGEN_RUN_PARALLELIZABLE_LOOP(condition) EIGEN_THE_PARALLELIZABLE_LOOP
#endif
// FIXME with the always_inline attribute,
// gcc 3.4.x reports the following compilation error:
// Eval.h:91: sorry, unimplemented: inlining failed in call to 'const Eigen::Eval<Derived> Eigen::MatrixBase<Scalar, Derived>::eval() const'