33 #ifndef EIGEN_SELFADJOINT_MATRIX_VECTOR_MKL_H 34 #define EIGEN_SELFADJOINT_MATRIX_VECTOR_MKL_H 46 template<
typename Scalar,
typename Index,
int StorageOrder,
int UpLo,
bool ConjugateLhs,
bool ConjugateRhs>
50 #define EIGEN_MKL_SYMV_SPECIALIZE(Scalar) \ 51 template<typename Index, int StorageOrder, int UpLo, bool ConjugateLhs, bool ConjugateRhs> \ 52 struct selfadjoint_matrix_vector_product<Scalar,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs,Specialized> { \ 54 Index size, const Scalar* lhs, Index lhsStride, \ 55 const Scalar* _rhs, Index rhsIncr, Scalar* res, Scalar alpha) { \ 57 IsColMajor = StorageOrder==ColMajor \ 59 if (IsColMajor == ConjugateLhs) {\ 60 selfadjoint_matrix_vector_product<Scalar,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs,BuiltIn>::run( \ 61 size, lhs, lhsStride, _rhs, rhsIncr, res, alpha); \ 63 selfadjoint_matrix_vector_product_symv<Scalar,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs>::run( \ 64 size, lhs, lhsStride, _rhs, rhsIncr, res, alpha); \ 74 #define EIGEN_MKL_SYMV_SPECIALIZATION(EIGTYPE,MKLTYPE,MKLFUNC) \ 75 template<typename Index, int StorageOrder, int UpLo, bool ConjugateLhs, bool ConjugateRhs> \ 76 struct selfadjoint_matrix_vector_product_symv<EIGTYPE,Index,StorageOrder,UpLo,ConjugateLhs,ConjugateRhs> \ 78 typedef Matrix<EIGTYPE,Dynamic,1,ColMajor> SYMVVector;\ 81 Index size, const EIGTYPE* lhs, Index lhsStride, \ 82 const EIGTYPE* _rhs, Index rhsIncr, EIGTYPE* res, EIGTYPE alpha) \ 85 IsRowMajor = StorageOrder==RowMajor ? 1 : 0, \ 86 IsLower = UpLo == Lower ? 1 : 0 \ 88 MKL_INT n=size, lda=lhsStride, incx=rhsIncr, incy=1; \ 89 MKLTYPE alpha_, beta_; \ 90 const EIGTYPE *x_ptr, myone(1); \ 91 char uplo=(IsRowMajor) ? (IsLower ? 'U' : 'L') : (IsLower ? 'L' : 'U'); \ 92 assign_scalar_eig2mkl(alpha_, alpha); \ 93 assign_scalar_eig2mkl(beta_, myone); \ 96 Map<const SYMVVector, 0, InnerStride<> > map_x(_rhs,size,1,InnerStride<>(incx)); \ 97 x_tmp=map_x.conjugate(); \ 101 MKLFUNC(&uplo, &n, &alpha_, (const MKLTYPE*)lhs, &lda, (const MKLTYPE*)x_ptr, &incx, &beta_, (MKLTYPE*)res, &incy); \ 114 #endif // EIGEN_SELFADJOINT_MATRIX_VECTOR_MKL_H int BLASFUNC() chemv(char *, int *, float *, float *, int *, float *, int *, float *, float *, int *)
iterative scaling algorithm to equilibrate rows and column norms in matrices
#define EIGEN_MKL_SYMV_SPECIALIZE(Scalar)
int BLASFUNC() ssymv(char *, int *, float *, float *, int *, float *, int *, float *, float *, int *)
int BLASFUNC() zhemv(char *, int *, double *, double *, int *, double *, int *, double *, double *, int *)
#define EIGEN_MKL_SYMV_SPECIALIZATION(EIGTYPE, MKLTYPE, MKLFUNC)
int BLASFUNC() dsymv(char *, int *, double *, double *, int *, double *, int *, double *, double *, int *)