Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, ResInnerStride, UpLo > Struct Template Reference

#include <GeneralMatrixMatrixTriangular.h>

Public Types

enum  { BlockSize = meta_least_common_multiple<plain_enum_max(mr, nr), plain_enum_min(mr, nr)>::ret }
 
typedef gebp_traits< LhsScalar, RhsScalar, ConjLhs, ConjRhs > Traits
 
typedef Traits::ResScalar ResScalar
 

Public Member Functions

void operator() (ResScalar *res_, Index resIncr, Index resStride, const LhsScalar *blockA, const RhsScalar *blockB, Index size, Index depth, const ResScalar &alpha)
 

Member Typedef Documentation

◆ ResScalar

template<typename LhsScalar , typename RhsScalar , typename Index , int mr, int nr, bool ConjLhs, bool ConjRhs, int ResInnerStride, int UpLo>
typedef Traits::ResScalar Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, ResInnerStride, UpLo >::ResScalar

◆ Traits

template<typename LhsScalar , typename RhsScalar , typename Index , int mr, int nr, bool ConjLhs, bool ConjRhs, int ResInnerStride, int UpLo>
typedef gebp_traits<LhsScalar, RhsScalar, ConjLhs, ConjRhs> Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, ResInnerStride, UpLo >::Traits

Member Enumeration Documentation

◆ anonymous enum

template<typename LhsScalar , typename RhsScalar , typename Index , int mr, int nr, bool ConjLhs, bool ConjRhs, int ResInnerStride, int UpLo>
anonymous enum
Enumerator
BlockSize 
155 { BlockSize = meta_least_common_multiple<plain_enum_max(mr, nr), plain_enum_min(mr, nr)>::ret };
Eigen::DenseIndex ret
Definition: level1_cplx_impl.h:43
constexpr int plain_enum_min(A a, B b)
Definition: Meta.h:649
constexpr int plain_enum_max(A a, B b)
Definition: Meta.h:656
@ BlockSize
Definition: GeneralMatrixMatrixTriangular.h:155

Member Function Documentation

◆ operator()()

template<typename LhsScalar , typename RhsScalar , typename Index , int mr, int nr, bool ConjLhs, bool ConjRhs, int ResInnerStride, int UpLo>
void Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, ResInnerStride, UpLo >::operator() ( ResScalar res_,
Index  resIncr,
Index  resStride,
const LhsScalar *  blockA,
const RhsScalar *  blockB,
Index  size,
Index  depth,
const ResScalar alpha 
)
inline
157  {
158  typedef blas_data_mapper<ResScalar, Index, ColMajor, Unaligned, ResInnerStride> ResMapper;
159  typedef blas_data_mapper<ResScalar, Index, ColMajor, Unaligned> BufferMapper;
160  ResMapper res(res_, resStride, resIncr);
161  gebp_kernel<LhsScalar, RhsScalar, Index, ResMapper, mr, nr, ConjLhs, ConjRhs> gebp_kernel1;
162  gebp_kernel<LhsScalar, RhsScalar, Index, BufferMapper, mr, nr, ConjLhs, ConjRhs> gebp_kernel2;
163 
164  Matrix<ResScalar, BlockSize, BlockSize, ColMajor> buffer;
165 
166  // let's process the block per panel of actual_mc x BlockSize,
167  // again, each is split into three parts, etc.
168  for (Index j = 0; j < size; j += BlockSize) {
169  Index actualBlockSize = std::min<Index>(BlockSize, size - j);
170  const RhsScalar* actual_b = blockB + j * depth;
171 
172  if (UpLo == Upper)
173  gebp_kernel1(res.getSubMapper(0, j), blockA, actual_b, j, depth, actualBlockSize, alpha, -1, -1, 0, 0);
174 
175  // selfadjoint micro block
176  {
177  Index i = j;
178  buffer.setZero();
179  // 1 - apply the kernel on the temporary buffer
180  gebp_kernel2(BufferMapper(buffer.data(), BlockSize), blockA + depth * i, actual_b, actualBlockSize, depth,
181  actualBlockSize, alpha, -1, -1, 0, 0);
182 
183  // 2 - triangular accumulation
184  for (Index j1 = 0; j1 < actualBlockSize; ++j1) {
185  typename ResMapper::LinearMapper r = res.getLinearMapper(i, j + j1);
186  for (Index i1 = UpLo == Lower ? j1 : 0; UpLo == Lower ? i1 < actualBlockSize : i1 <= j1; ++i1)
187  r(i1) += buffer(i1, j1);
188  }
189  }
190 
191  if (UpLo == Lower) {
192  Index i = j + actualBlockSize;
193  gebp_kernel1(res.getSubMapper(i, j), blockA + depth * i, actual_b, size - i, depth, actualBlockSize, alpha, -1,
194  -1, 0, 0);
195  }
196  }
197  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
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
@ Upper
Definition: Constants.h:213
RealScalar alpha
Definition: level1_cplx_impl.h:151
if(code !=NOTR) std const Scalar * actual_b
Definition: level2_impl.h:67
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
r
Definition: UniformPSDSelfTest.py:20
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References actual_b, alpha, Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, ResInnerStride, UpLo >::BlockSize, Eigen::PlainObjectBase< Derived >::data(), i, j, Eigen::Lower, UniformPSDSelfTest::r, res, Eigen::PlainObjectBase< Derived >::setZero(), size, and Eigen::Upper.


The documentation for this struct was generated from the following file: