- split and rename defined tokens to enable the use of BLAS/Lapack/VML/etc

- include MKL headers outside the Eigen namespace.
This commit is contained in:
Gael Guennebaud 2011-12-09 10:06:49 +01:00
parent 015c331252
commit 43cdd242d0
17 changed files with 53 additions and 37 deletions

View File

@ -24,7 +24,7 @@ namespace Eigen {
#include "src/misc/Solve.h"
#include "src/Cholesky/LLT.h"
#include "src/Cholesky/LDLT.h"
#ifdef EIGEN_MKL
#ifdef EIGEN_USE_MKL_CLAPACK
#include "src/Cholesky/LLT_MKL.h"
#endif

View File

@ -34,6 +34,10 @@
// defined e.g. EIGEN_DONT_ALIGN) so it needs to be done before we do anything with vectorization.
#include "src/Core/util/Macros.h"
// this include file manages BLAS and MKL related macros
// and inclusion of their respective header files
#include "src/Core/util/MKL_support.h"
// if alignment is disabled, then disable vectorization. Note: EIGEN_ALIGN is the proper check, it takes into
// account both the user's will (EIGEN_DONT_ALIGN) and our own platform checks
#if !EIGEN_ALIGN
@ -336,16 +340,6 @@ using std::ptrdiff_t;
#include "src/Core/products/TriangularMatrixVector.h"
#include "src/Core/products/TriangularMatrixMatrix.h"
#include "src/Core/products/TriangularSolverMatrix.h"
#ifdef EIGEN_MKL
#include "src/Core/products/GeneralMatrixMatrix_MKL.h"
#include "src/Core/products/GeneralMatrixVector_MKL.h"
#include "src/Core/products/GeneralMatrixMatrixTriangular_MKL.h"
#include "src/Core/products/SelfadjointMatrixMatrix_MKL.h"
#include "src/Core/products/SelfadjointMatrixVector_MKL.h"
#include "src/Core/products/TriangularMatrixMatrix_MKL.h"
#include "src/Core/products/TriangularMatrixVector_MKL.h"
#include "src/Core/products/TriangularSolverMatrix_MKL.h"
#endif
#include "src/Core/products/TriangularSolverVector.h"
#include "src/Core/BandMatrix.h"
@ -363,7 +357,19 @@ using std::ptrdiff_t;
#include "src/Core/CoreEvaluators.h"
#include "src/Core/AssignEvaluator.h"
#endif
#ifdef EIGEN_MKL
#ifdef EIGEN_USE_BLAS
#include "src/Core/products/GeneralMatrixMatrix_MKL.h"
#include "src/Core/products/GeneralMatrixVector_MKL.h"
#include "src/Core/products/GeneralMatrixMatrixTriangular_MKL.h"
#include "src/Core/products/SelfadjointMatrixMatrix_MKL.h"
#include "src/Core/products/SelfadjointMatrixVector_MKL.h"
#include "src/Core/products/TriangularMatrixMatrix_MKL.h"
#include "src/Core/products/TriangularMatrixVector_MKL.h"
#include "src/Core/products/TriangularSolverMatrix_MKL.h"
#endif // EIGEN_USE_BLAS
#ifdef EIGEN_USE_MKL_VML
#include "src/Core/Assign_MKL.h"
#endif

View File

@ -36,7 +36,7 @@ namespace Eigen {
#include "src/Eigenvalues/ComplexSchur.h"
#include "src/Eigenvalues/ComplexEigenSolver.h"
#include "src/Eigenvalues/MatrixBaseEigenvalues.h"
#ifdef EIGEN_MKL
#ifdef EIGEN_USE_MKL_CLAPACK
#include "src/Eigenvalues/RealSchur_MKL.h"
#include "src/Eigenvalues/ComplexSchur_MKL.h"
#include "src/Eigenvalues/SelfAdjointEigenSolver_MKL.h"

View File

@ -23,7 +23,7 @@ namespace Eigen {
#include "src/misc/Image.h"
#include "src/LU/FullPivLU.h"
#include "src/LU/PartialPivLU.h"
#ifdef EIGEN_MKL
#ifdef EIGEN_USE_MKL_CLAPACK
#include "src/LU/PartialPivLU_MKL.h"
#endif
#include "src/LU/Determinant.h"

View File

@ -28,7 +28,7 @@ namespace Eigen {
#include "src/QR/HouseholderQR.h"
#include "src/QR/FullPivHouseholderQR.h"
#include "src/QR/ColPivHouseholderQR.h"
#ifdef EIGEN_MKL
#ifdef EIGEN_USE_MKL_CLAPACK
#include "src/QR/HouseholderQR_MKL.h"
#include "src/QR/ColPivHouseholderQR_MKL.h"
#endif

View File

@ -24,7 +24,7 @@ namespace Eigen {
#include "src/misc/Solve.h"
#include "src/SVD/JacobiSVD.h"
#ifdef EIGEN_MKL
#if defined(EIGEN_ALLOW_JACOBISVD_USE_LAPACKSVD) && defined(EIGEN_USE_MKL_CLAPACK)
#include "src/SVD/JacobiSVD_MKL.h"
#endif
#include "src/SVD/UpperBidiagonalization.h"

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_ASSIGN_VML_H
#define EIGEN_ASSIGN_VML_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {
template<typename Op> struct vml_call

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_MKL_H
#define EIGEN_GENERAL_MATRIX_MATRIX_TRIANGULAR_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {
template <typename Index, typename Scalar, int AStorageOrder, bool ConjugateA, int ResStorageOrder, int UpLo>

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_GENERAL_MATRIX_MATRIX_MKL_H
#define EIGEN_GENERAL_MATRIX_MATRIX_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {
/**********************************************************************

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_GENERAL_MATRIX_VECTOR_MKL_H
#define EIGEN_GENERAL_MATRIX_VECTOR_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {
/**********************************************************************

View File

@ -85,7 +85,9 @@ template<typename Index> struct GemmParallelInfo
template<bool Condition, typename Functor, typename Index>
void parallelize_gemm(const Functor& func, Index rows, Index cols, bool transpose)
{
#if !(defined (EIGEN_HAS_OPENMP)) || defined (EIGEN_MKL)
// TODO when EIGEN_USE_BLAS is defined,
// we should still enable OMP for other scalar types
#if !(defined (EIGEN_HAS_OPENMP)) || defined (EIGEN_USE_BLAS)
// FIXME the transpose variable is only needed to properly split
// the matrix product when multithreading is enabled. This is a temporary
// fix to support row-major destination matrices. This whole

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_MKL_H
#define EIGEN_SELFADJOINT_MATRIX_MATRIX_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_MKL_H
#define EIGEN_SELFADJOINT_MATRIX_VECTOR_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {
/**********************************************************************

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_TRIANGULAR_MATRIX_MATRIX_MKL_H
#define EIGEN_TRIANGULAR_MATRIX_MATRIX_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_TRIANGULAR_MATRIX_VECTOR_MKL_H
#define EIGEN_TRIANGULAR_MATRIX_VECTOR_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {
/**********************************************************************

View File

@ -33,8 +33,6 @@
#ifndef EIGEN_TRIANGULAR_SOLVER_MATRIX_MKL_H
#define EIGEN_TRIANGULAR_SOLVER_MATRIX_MKL_H
#include "Eigen/src/Core/util/MKL_support.h"
namespace internal {
// implements LeftSide op(triangular)^-1 * general

View File

@ -33,12 +33,31 @@
#ifndef EIGEN_MKL_SUPPORT_H
#define EIGEN_MKL_SUPPORT_H
#ifdef EIGEN_USE_MKL_ALL
#ifndef EIGEN_USE_BLAS
#define EIGEN_USE_BLAS
#endif
#ifndef EIGEN_USE_MKL_CLAPACK
#define EIGEN_USE_MKL_CLAPACK
#endif
#ifndef EIGEN_USE_MKL_VML
#define EIGEN_USE_MKL_VML
#endif
#endif
#if defined(EIGEN_USE_MKL_CLAPACK) || defined(EIGEN_USE_MKL_VML)
#define EIGEN_USE_MKL
#endif
#if defined EIGEN_USE_MKL
#include <mkl.h>
#include <mkl_lapacke.h>
#include <iostream>
#define EIGEN_MKL_VML_THRESHOLD 128
namespace Eigen {
typedef std::complex<double> dcomplex;
typedef std::complex<float> scomplex;
@ -80,5 +99,12 @@ inline void assign_conj_scalar_eig2mkl<MKL_Complex8,scomplex>(MKL_Complex8& mklS
} // end namespace internal
} // end namespace Eigen
#endif
#elif defined EIGEN_USE_BLAS
#include "../../misc/blas.h"
#endif
#endif