bug #173: remove dependency to MKL for LAPACKe backend.

This commit is contained in:
Gael Guennebaud
2016-07-25 17:55:07 +02:00
parent 34b483e25d
commit 4d54e3dd33
10 changed files with 16349 additions and 42 deletions

View File

@@ -40,10 +40,10 @@ namespace Eigen {
namespace internal {
template<typename Scalar> struct mkl_llt;
template<typename Scalar> struct lapacke_llt;
#define EIGEN_MKL_LLT(EIGTYPE, MKLTYPE, MKLPREFIX) \
template<> struct mkl_llt<EIGTYPE> \
#define EIGEN_MKL_LLT(EIGTYPE, BLASTYPE, MKLPREFIX) \
template<> struct lapacke_llt<EIGTYPE> \
{ \
template<typename MatrixType> \
static inline Index potrf(MatrixType& m, char uplo) \
@@ -59,7 +59,7 @@ template<> struct mkl_llt<EIGTYPE> \
a = &(m.coeffRef(0,0)); \
lda = convert_index<lapack_int>(m.outerStride()); \
\
info = LAPACKE_##MKLPREFIX##potrf( matrix_order, uplo, size, (MKLTYPE*)a, lda ); \
info = LAPACKE_##MKLPREFIX##potrf( matrix_order, uplo, size, (BLASTYPE*)a, lda ); \
info = (info==0) ? -1 : info>0 ? info-1 : size; \
return info; \
} \
@@ -69,7 +69,7 @@ template<> struct llt_inplace<EIGTYPE, Lower> \
template<typename MatrixType> \
static Index blocked(MatrixType& m) \
{ \
return mkl_llt<EIGTYPE>::potrf(m, 'L'); \
return lapacke_llt<EIGTYPE>::potrf(m, 'L'); \
} \
template<typename MatrixType, typename VectorType> \
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \
@@ -80,7 +80,7 @@ template<> struct llt_inplace<EIGTYPE, Upper> \
template<typename MatrixType> \
static Index blocked(MatrixType& m) \
{ \
return mkl_llt<EIGTYPE>::potrf(m, 'U'); \
return lapacke_llt<EIGTYPE>::potrf(m, 'U'); \
} \
template<typename MatrixType, typename VectorType> \
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \
@@ -92,8 +92,8 @@ template<> struct llt_inplace<EIGTYPE, Upper> \
EIGEN_MKL_LLT(double, double, d)
EIGEN_MKL_LLT(float, float, s)
EIGEN_MKL_LLT(dcomplex, MKL_Complex16, z)
EIGEN_MKL_LLT(scomplex, MKL_Complex8, c)
EIGEN_MKL_LLT(dcomplex, lapack_complex_double, z)
EIGEN_MKL_LLT(scomplex, lapack_complex_float, c)
} // end namespace internal