33 #ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_BLAS_H    34 #define EIGEN_SELFADJOINT_MATRIX_MATRIX_BLAS_H    43 #define EIGEN_BLAS_SYMM_L(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX) \    44 template <typename Index, \    45           int LhsStorageOrder, bool ConjugateLhs, \    46           int RhsStorageOrder, bool ConjugateRhs> \    47 struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,true,ConjugateLhs,RhsStorageOrder,false,ConjugateRhs,ColMajor> \    51     Index rows, Index cols, \    52     const EIGTYPE* _lhs, Index lhsStride, \    53     const EIGTYPE* _rhs, Index rhsStride, \    54     EIGTYPE* res,        Index resStride, \    55     EIGTYPE alpha, level3_blocking<EIGTYPE, EIGTYPE>& ) \    57     char side='L', uplo='L'; \    58     BlasIndex m, n, lda, ldb, ldc; \    59     const EIGTYPE *a, *b; \    61     MatrixX##EIGPREFIX b_tmp; \    65     m = convert_index<BlasIndex>(rows);  \    66     n = convert_index<BlasIndex>(cols);  \    69     lda = convert_index<BlasIndex>(lhsStride); \    70     ldb = convert_index<BlasIndex>(rhsStride); \    71     ldc = convert_index<BlasIndex>(resStride); \    74     if (LhsStorageOrder==RowMajor) uplo='U'; \    77     if (RhsStorageOrder==RowMajor) { \    78       Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > rhs(_rhs,n,m,OuterStride<>(rhsStride)); \    79       b_tmp = rhs.adjoint(); \    81       ldb = convert_index<BlasIndex>(b_tmp.outerStride()); \    84     BLASPREFIX##symm_(&side, &uplo, &m, &n, &numext::real_ref(alpha), (const BLASTYPE*)a, &lda, (const BLASTYPE*)b, &ldb, &numext::real_ref(beta), (BLASTYPE*)res, &ldc); \    90 #define EIGEN_BLAS_HEMM_L(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX) \    91 template <typename Index, \    92           int LhsStorageOrder, bool ConjugateLhs, \    93           int RhsStorageOrder, bool ConjugateRhs> \    94 struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,true,ConjugateLhs,RhsStorageOrder,false,ConjugateRhs,ColMajor> \    97     Index rows, Index cols, \    98     const EIGTYPE* _lhs, Index lhsStride, \    99     const EIGTYPE* _rhs, Index rhsStride, \   100     EIGTYPE* res,        Index resStride, \   101     EIGTYPE alpha, level3_blocking<EIGTYPE, EIGTYPE>& ) \   103     char side='L', uplo='L'; \   104     BlasIndex m, n, lda, ldb, ldc; \   105     const EIGTYPE *a, *b; \   107     MatrixX##EIGPREFIX b_tmp; \   108     Matrix<EIGTYPE, Dynamic, Dynamic, LhsStorageOrder> a_tmp; \   112     m = convert_index<BlasIndex>(rows); \   113     n = convert_index<BlasIndex>(cols); \   116     lda = convert_index<BlasIndex>(lhsStride); \   117     ldb = convert_index<BlasIndex>(rhsStride); \   118     ldc = convert_index<BlasIndex>(resStride); \   121     if (((LhsStorageOrder==ColMajor) && ConjugateLhs) || ((LhsStorageOrder==RowMajor) && (!ConjugateLhs))) { \   122       Map<const Matrix<EIGTYPE, Dynamic, Dynamic, LhsStorageOrder>, 0, OuterStride<> > lhs(_lhs,m,m,OuterStride<>(lhsStride)); \   123       a_tmp = lhs.conjugate(); \   125       lda = convert_index<BlasIndex>(a_tmp.outerStride()); \   127     if (LhsStorageOrder==RowMajor) uplo='U'; \   129     if (RhsStorageOrder==ColMajor && (!ConjugateRhs)) { \   132       if (RhsStorageOrder==ColMajor && ConjugateRhs) { \   133         Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > rhs(_rhs,m,n,OuterStride<>(rhsStride)); \   134         b_tmp = rhs.conjugate(); \   136       if (ConjugateRhs) { \   137         Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > rhs(_rhs,n,m,OuterStride<>(rhsStride)); \   138         b_tmp = rhs.adjoint(); \   140         Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > rhs(_rhs,n,m,OuterStride<>(rhsStride)); \   141         b_tmp = rhs.transpose(); \   144       ldb = convert_index<BlasIndex>(b_tmp.outerStride()); \   147     BLASPREFIX##hemm_(&side, &uplo, &m, &n, &numext::real_ref(alpha), (const BLASTYPE*)a, &lda, (const BLASTYPE*)b, &ldb, &numext::real_ref(beta), (BLASTYPE*)res, &ldc); \   160 #define EIGEN_BLAS_SYMM_R(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX) \   161 template <typename Index, \   162           int LhsStorageOrder, bool ConjugateLhs, \   163           int RhsStorageOrder, bool ConjugateRhs> \   164 struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,false,ConjugateLhs,RhsStorageOrder,true,ConjugateRhs,ColMajor> \   168     Index rows, Index cols, \   169     const EIGTYPE* _lhs, Index lhsStride, \   170     const EIGTYPE* _rhs, Index rhsStride, \   171     EIGTYPE* res,        Index resStride, \   172     EIGTYPE alpha, level3_blocking<EIGTYPE, EIGTYPE>& ) \   174     char side='R', uplo='L'; \   175     BlasIndex m, n, lda, ldb, ldc; \   176     const EIGTYPE *a, *b; \   178     MatrixX##EIGPREFIX b_tmp; \   181     m = convert_index<BlasIndex>(rows);  \   182     n = convert_index<BlasIndex>(cols);  \   185     lda = convert_index<BlasIndex>(rhsStride); \   186     ldb = convert_index<BlasIndex>(lhsStride); \   187     ldc = convert_index<BlasIndex>(resStride); \   190     if (RhsStorageOrder==RowMajor) uplo='U'; \   193     if (LhsStorageOrder==RowMajor) { \   194       Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > lhs(_lhs,n,m,OuterStride<>(rhsStride)); \   195       b_tmp = lhs.adjoint(); \   197       ldb = convert_index<BlasIndex>(b_tmp.outerStride()); \   200     BLASPREFIX##symm_(&side, &uplo, &m, &n, &numext::real_ref(alpha), (const BLASTYPE*)a, &lda, (const BLASTYPE*)b, &ldb, &numext::real_ref(beta), (BLASTYPE*)res, &ldc); \   206 #define EIGEN_BLAS_HEMM_R(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX) \   207 template <typename Index, \   208           int LhsStorageOrder, bool ConjugateLhs, \   209           int RhsStorageOrder, bool ConjugateRhs> \   210 struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,false,ConjugateLhs,RhsStorageOrder,true,ConjugateRhs,ColMajor> \   213     Index rows, Index cols, \   214     const EIGTYPE* _lhs, Index lhsStride, \   215     const EIGTYPE* _rhs, Index rhsStride, \   216     EIGTYPE* res,        Index resStride, \   217     EIGTYPE alpha, level3_blocking<EIGTYPE, EIGTYPE>& ) \   219     char side='R', uplo='L'; \   220     BlasIndex m, n, lda, ldb, ldc; \   221     const EIGTYPE *a, *b; \   223     MatrixX##EIGPREFIX b_tmp; \   224     Matrix<EIGTYPE, Dynamic, Dynamic, RhsStorageOrder> a_tmp; \   227     m = convert_index<BlasIndex>(rows); \   228     n = convert_index<BlasIndex>(cols); \   231     lda = convert_index<BlasIndex>(rhsStride); \   232     ldb = convert_index<BlasIndex>(lhsStride); \   233     ldc = convert_index<BlasIndex>(resStride); \   236     if (((RhsStorageOrder==ColMajor) && ConjugateRhs) || ((RhsStorageOrder==RowMajor) && (!ConjugateRhs))) { \   237       Map<const Matrix<EIGTYPE, Dynamic, Dynamic, RhsStorageOrder>, 0, OuterStride<> > rhs(_rhs,n,n,OuterStride<>(rhsStride)); \   238       a_tmp = rhs.conjugate(); \   240       lda = convert_index<BlasIndex>(a_tmp.outerStride()); \   242     if (RhsStorageOrder==RowMajor) uplo='U'; \   244     if (LhsStorageOrder==ColMajor && (!ConjugateLhs)) { \   247       if (LhsStorageOrder==ColMajor && ConjugateLhs) { \   248         Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > lhs(_lhs,m,n,OuterStride<>(lhsStride)); \   249         b_tmp = lhs.conjugate(); \   251       if (ConjugateLhs) { \   252         Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > lhs(_lhs,n,m,OuterStride<>(lhsStride)); \   253         b_tmp = lhs.adjoint(); \   255         Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > lhs(_lhs,n,m,OuterStride<>(lhsStride)); \   256         b_tmp = lhs.transpose(); \   259       ldb = convert_index<BlasIndex>(b_tmp.outerStride()); \   262     BLASPREFIX##hemm_(&side, &uplo, &m, &n, &numext::real_ref(alpha), (const BLASTYPE*)a, &lda, (const BLASTYPE*)b, &ldb, &numext::real_ref(beta), (BLASTYPE*)res, &ldc); \   275 #endif // EIGEN_SELFADJOINT_MATRIX_MATRIX_BLAS_H #define EIGEN_BLAS_HEMM_L(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX)
#define EIGEN_BLAS_HEMM_R(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX)
#define EIGEN_BLAS_SYMM_R(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX)
std::complex< float > scomplex
std::complex< double > dcomplex
#define EIGEN_BLAS_SYMM_L(EIGTYPE, BLASTYPE, EIGPREFIX, BLASPREFIX)