33 #ifndef EIGEN_GENERAL_MATRIX_VECTOR_MKL_H 34 #define EIGEN_GENERAL_MATRIX_VECTOR_MKL_H 49 template<
typename Index,
typename LhsScalar,
int LhsStorageOrder,
bool ConjugateLhs,
typename RhsScalar,
bool ConjugateRhs>
53 #define EIGEN_MKL_GEMV_SPECIALIZE(Scalar) \ 54 template<typename Index, bool ConjugateLhs, bool ConjugateRhs> \ 55 struct general_matrix_vector_product<Index,Scalar,ColMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \ 57 Index rows, Index cols, \ 58 const Scalar* lhs, Index lhsStride, \ 59 const Scalar* rhs, Index rhsIncr, \ 60 Scalar* res, Index resIncr, Scalar alpha) \ 63 general_matrix_vector_product<Index,Scalar,ColMajor,ConjugateLhs,Scalar,ConjugateRhs,BuiltIn>::run( \ 64 rows, cols, lhs, lhsStride, rhs, rhsIncr, res, resIncr, alpha); \ 66 general_matrix_vector_product_gemv<Index,Scalar,ColMajor,ConjugateLhs,Scalar,ConjugateRhs>::run( \ 67 rows, cols, lhs, lhsStride, rhs, rhsIncr, res, resIncr, alpha); \ 71 template<typename Index, bool ConjugateLhs, bool ConjugateRhs> \ 72 struct general_matrix_vector_product<Index,Scalar,RowMajor,ConjugateLhs,Scalar,ConjugateRhs,Specialized> { \ 74 Index rows, Index cols, \ 75 const Scalar* lhs, Index lhsStride, \ 76 const Scalar* rhs, Index rhsIncr, \ 77 Scalar* res, Index resIncr, Scalar alpha) \ 79 general_matrix_vector_product_gemv<Index,Scalar,RowMajor,ConjugateLhs,Scalar,ConjugateRhs>::run( \ 80 rows, cols, lhs, lhsStride, rhs, rhsIncr, res, resIncr, alpha); \ 89 #define EIGEN_MKL_GEMV_SPECIALIZATION(EIGTYPE,MKLTYPE,MKLPREFIX) \ 90 template<typename Index, int LhsStorageOrder, bool ConjugateLhs, bool ConjugateRhs> \ 91 struct general_matrix_vector_product_gemv<Index,EIGTYPE,LhsStorageOrder,ConjugateLhs,EIGTYPE,ConjugateRhs> \ 93 typedef Matrix<EIGTYPE,Dynamic,1,ColMajor> GEMVVector;\ 96 Index rows, Index cols, \ 97 const EIGTYPE* lhs, Index lhsStride, \ 98 const EIGTYPE* rhs, Index rhsIncr, \ 99 EIGTYPE* res, Index resIncr, EIGTYPE alpha) \ 101 MKL_INT m=rows, n=cols, lda=lhsStride, incx=rhsIncr, incy=resIncr; \ 102 MKLTYPE alpha_, beta_; \ 103 const EIGTYPE *x_ptr, myone(1); \ 104 char trans=(LhsStorageOrder==ColMajor) ? 'N' : (ConjugateLhs) ? 'C' : 'T'; \ 105 if (LhsStorageOrder==RowMajor) { \ 109 assign_scalar_eig2mkl(alpha_, alpha); \ 110 assign_scalar_eig2mkl(beta_, myone); \ 112 if (ConjugateRhs) { \ 113 Map<const GEMVVector, 0, InnerStride<> > map_x(rhs,cols,1,InnerStride<>(incx)); \ 114 x_tmp=map_x.conjugate(); \ 115 x_ptr=x_tmp.data(); \ 118 MKLPREFIX##gemv(&trans, &m, &n, &alpha_, (const MKLTYPE*)lhs, &lda, (const MKLTYPE*)x_ptr, &incx, &beta_, (MKLTYPE*)res, &incy); \ 131 #endif // EIGEN_GENERAL_MATRIX_VECTOR_MKL_H #define EIGEN_MKL_GEMV_SPECIALIZATION(EIGTYPE, MKLTYPE, MKLPREFIX)
iterative scaling algorithm to equilibrate rows and column norms in matrices
#define EIGEN_MKL_GEMV_SPECIALIZE(Scalar)