SelfadjointMatrixVector_BLAS.h File Reference

Go to the source code of this file.

Classes

struct  Eigen::internal::selfadjoint_matrix_vector_product_symv< Scalar, Index, StorageOrder, UpLo, ConjugateLhs, ConjugateRhs >
 

Namespaces

 Eigen
 Namespace containing all symbols from the Eigen library.
 
 Eigen::internal
 Namespace containing low-level routines from the Eigen library.
 

Macros

#define EIGEN_BLAS_SYMV_SPECIALIZE(Scalar)
 
#define EIGEN_BLAS_SYMV_SPECIALIZATION(EIGTYPE, BLASTYPE, BLASFUNC)
 

Macro Definition Documentation

◆ EIGEN_BLAS_SYMV_SPECIALIZATION

#define EIGEN_BLAS_SYMV_SPECIALIZATION (   EIGTYPE,
  BLASTYPE,
  BLASFUNC 
)
Value:
template <typename Index, int StorageOrder, int UpLo, bool ConjugateLhs, bool ConjugateRhs> \
struct selfadjoint_matrix_vector_product_symv<EIGTYPE, Index, StorageOrder, UpLo, ConjugateLhs, ConjugateRhs> { \
typedef Matrix<EIGTYPE, Dynamic, 1, ColMajor> SYMVVector; \
\
static void run(Index size, const EIGTYPE* lhs, Index lhsStride, const EIGTYPE* _rhs, EIGTYPE* res, \
EIGTYPE alpha) { \
if (size == 0) return; \
enum { IsRowMajor = StorageOrder == RowMajor ? 1 : 0, IsLower = UpLo == Lower ? 1 : 0 }; \
BlasIndex n = convert_index<BlasIndex>(size), lda = convert_index<BlasIndex>(lhsStride), incx = 1, incy = 1; \
EIGTYPE beta(1); \
const EIGTYPE* x_ptr; \
char uplo = (IsRowMajor) ? (IsLower ? 'U' : 'L') : (IsLower ? 'L' : 'U'); \
SYMVVector x_tmp; \
if (ConjugateRhs) { \
Map<const SYMVVector, 0> map_x(_rhs, size, 1); \
x_tmp = map_x.conjugate(); \
x_ptr = x_tmp.data(); \
} else \
x_ptr = _rhs; \
BLASFUNC(&uplo, &n, (const BLASTYPE*)&numext::real_ref(alpha), (const BLASTYPE*)lhs, &lda, \
(const BLASTYPE*)x_ptr, &incx, (const BLASTYPE*)&numext::real_ref(beta), (BLASTYPE*)res, &incy); \
} \
};
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
@ Lower
Definition: Constants.h:211
@ RowMajor
Definition: Constants.h:320
int RealScalar int RealScalar int * incy
Definition: level1_cplx_impl.h:124
if n return
Definition: level1_cplx_impl.h:31
RealScalar alpha
Definition: level1_cplx_impl.h:151
RealScalar RealScalar int * incx
Definition: level1_cplx_impl.h:27
const char * uplo
Definition: level2_cplx_impl.h:20
const char const int const RealScalar const RealScalar const int * lda
Definition: level2_cplx_impl.h:20
Scalar beta
Definition: level2_cplx_impl.h:36
EIGEN_DEVICE_FUNC internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar)> real_ref(const Scalar &x)
Definition: MathFunctions.h:1051
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317

◆ EIGEN_BLAS_SYMV_SPECIALIZE

#define EIGEN_BLAS_SYMV_SPECIALIZE (   Scalar)
Value:
template <typename Index, int StorageOrder, int UpLo, bool ConjugateLhs, bool ConjugateRhs> \
struct selfadjoint_matrix_vector_product<Scalar, Index, StorageOrder, UpLo, ConjugateLhs, ConjugateRhs, \
Specialized> { \
static void run(Index size, const Scalar* lhs, Index lhsStride, const Scalar* _rhs, Scalar* res, Scalar alpha) { \
enum { IsColMajor = StorageOrder == ColMajor }; \
if (IsColMajor == ConjugateLhs) { \
selfadjoint_matrix_vector_product<Scalar, Index, StorageOrder, UpLo, ConjugateLhs, ConjugateRhs, \
BuiltIn>::run(size, lhs, lhsStride, _rhs, res, alpha); \
} else { \
size, lhs, lhsStride, _rhs, res, alpha); \
} \
} \
};
SCALAR Scalar
Definition: bench_gemm.cpp:45
@ ColMajor
Definition: Constants.h:318