Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, UpLo > Struct Template Reference

#include <src/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h>

Public Types

enum  { BlockSize = meta_least_common_multiple<EIGEN_PLAIN_ENUM_MAX(mr,nr),EIGEN_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 resStride, const LhsScalar *blockA, const RhsScalar *blockB, Index size, Index depth, const ResScalar &alpha)
 

Detailed Description

template<typename LhsScalar, typename RhsScalar, typename Index, int mr, int nr, bool ConjLhs, bool ConjRhs, int UpLo>
struct Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, UpLo >

Member Typedef Documentation

◆ ResScalar

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

◆ Traits

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

Member Enumeration Documentation

◆ anonymous enum

template<typename LhsScalar , typename RhsScalar , typename Index , int mr, int nr, bool ConjLhs, bool ConjRhs, int UpLo>
anonymous enum
Enumerator
BlockSize 
142 {
143 BlockSize = meta_least_common_multiple<EIGEN_PLAIN_ENUM_MAX(mr,nr),EIGEN_PLAIN_ENUM_MIN(mr,nr)>::ret
144 };
#define EIGEN_PLAIN_ENUM_MAX(a, b)
Definition Macros.h:876
#define EIGEN_PLAIN_ENUM_MIN(a, b)
Definition Macros.h:875
@ BlockSize
Definition GeneralMatrixMatrixTriangular.h:143

Member Function Documentation

◆ operator()()

template<typename LhsScalar , typename RhsScalar , typename Index , int mr, int nr, bool ConjLhs, bool ConjRhs, int UpLo>
void Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, UpLo >::operator() ( ResScalar _res,
Index  resStride,
const LhsScalar *  blockA,
const RhsScalar *  blockB,
Index  size,
Index  depth,
const ResScalar alpha 
)
inline
146 {
147 typedef blas_data_mapper<ResScalar, Index, ColMajor> ResMapper;
148 ResMapper res(_res, resStride);
149 gebp_kernel<LhsScalar, RhsScalar, Index, ResMapper, mr, nr, ConjLhs, ConjRhs> gebp_kernel;
150
151 Matrix<ResScalar,BlockSize,BlockSize,ColMajor> buffer((internal::constructor_without_unaligned_array_assert()));
152
153 // let's process the block per panel of actual_mc x BlockSize,
154 // again, each is split into three parts, etc.
155 for (Index j=0; j<size; j+=BlockSize)
156 {
157 Index actualBlockSize = std::min<Index>(BlockSize,size - j);
158 const RhsScalar* actual_b = blockB+j*depth;
159
160 if(UpLo==Upper)
161 gebp_kernel(res.getSubMapper(0, j), blockA, actual_b, j, depth, actualBlockSize, alpha,
162 -1, -1, 0, 0);
163
164 // selfadjoint micro block
165 {
166 Index i = j;
167 buffer.setZero();
168 // 1 - apply the kernel on the temporary buffer
169 gebp_kernel(ResMapper(buffer.data(), BlockSize), blockA+depth*i, actual_b, actualBlockSize, depth, actualBlockSize, alpha,
170 -1, -1, 0, 0);
171 // 2 - triangular accumulation
172 for(Index j1=0; j1<actualBlockSize; ++j1)
173 {
174 ResScalar* r = &res(i, j + j1);
175 for(Index i1=UpLo==Lower ? j1 : 0;
176 UpLo==Lower ? i1<actualBlockSize : i1<=j1; ++i1)
177 r[i1] += buffer(i1,j1);
178 }
179 }
180
181 if(UpLo==Lower)
182 {
183 Index i = j+actualBlockSize;
184 gebp_kernel(res.getSubMapper(i, j), blockA+depth*i, actual_b, size-i,
185 depth, actualBlockSize, alpha, -1, -1, 0, 0);
186 }
187 }
188 }
@ Lower
Definition Constants.h:204
@ Upper
Definition Constants.h:206
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:33
constexpr auto size(const C &c) -> decltype(c.size())
Definition span.hpp:183
Traits::ResScalar ResScalar
Definition GeneralMatrixMatrixTriangular.h:140

References Eigen::internal::tribb_kernel< LhsScalar, RhsScalar, Index, mr, nr, ConjLhs, ConjRhs, UpLo >::BlockSize, Eigen::PlainObjectBase< Derived >::data(), Eigen::Lower, Eigen::PlainObjectBase< Derived >::setZero(), and Eigen::Upper.

+ Here is the call graph for this function:

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