mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
- 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:
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user