Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs > Class Template Reference

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

Public Types

enum  {
  ConjLhs = _ConjLhs , ConjRhs = _ConjRhs , Vectorizable = packet_traits<LhsScalar>::Vectorizable && packet_traits<RhsScalar>::Vectorizable , LhsPacketSize = Vectorizable ? packet_traits<LhsScalar>::size : 1 ,
  RhsPacketSize = Vectorizable ? packet_traits<RhsScalar>::size : 1 , ResPacketSize = Vectorizable ? packet_traits<ResScalar>::size : 1 , NumberOfRegisters = EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS , nr = 4 ,
  default_mr = (EIGEN_PLAIN_ENUM_MIN(16,NumberOfRegisters)/2/nr)*LhsPacketSize , mr = default_mr , LhsProgress = LhsPacketSize , RhsProgress = 1
}
 
typedef _LhsScalar LhsScalar
 
typedef _RhsScalar RhsScalar
 
typedef ScalarBinaryOpTraits< LhsScalar, RhsScalar >::ReturnType ResScalar
 
typedef packet_traits< LhsScalar >::type _LhsPacket
 
typedef packet_traits< RhsScalar >::type _RhsPacket
 
typedef packet_traits< ResScalar >::type _ResPacket
 
typedef conditional< Vectorizable, _LhsPacket, LhsScalar >::type LhsPacket
 
typedef conditional< Vectorizable, _RhsPacket, RhsScalar >::type RhsPacket
 
typedef conditional< Vectorizable, _ResPacket, ResScalar >::type ResPacket
 
typedef ResPacket AccPacket
 

Public Member Functions

EIGEN_STRONG_INLINE void initAcc (AccPacket &p)
 
EIGEN_STRONG_INLINE void broadcastRhs (const RhsScalar *b, RhsPacket &b0, RhsPacket &b1, RhsPacket &b2, RhsPacket &b3)
 
template<typename RhsPacketType >
EIGEN_STRONG_INLINE void loadRhs (const RhsScalar *b, RhsPacketType &dest) const
 
EIGEN_STRONG_INLINE void loadRhsQuad (const RhsScalar *b, RhsPacket &dest) const
 
template<typename LhsPacketType >
EIGEN_STRONG_INLINE void loadLhs (const LhsScalar *a, LhsPacketType &dest) const
 
template<typename LhsPacketType >
EIGEN_STRONG_INLINE void loadLhsUnaligned (const LhsScalar *a, LhsPacketType &dest) const
 
template<typename LhsPacketType , typename RhsPacketType , typename AccPacketType >
EIGEN_STRONG_INLINE void madd (const LhsPacketType &a, const RhsPacketType &b, AccPacketType &c, AccPacketType &tmp) const
 
EIGEN_STRONG_INLINE void acc (const AccPacket &c, const ResPacket &alpha, ResPacket &r) const
 
template<typename ResPacketHalf >
EIGEN_STRONG_INLINE void acc (const ResPacketHalf &c, const ResPacketHalf &alpha, ResPacketHalf &r) const
 

Detailed Description

template<typename _LhsScalar, typename _RhsScalar, bool _ConjLhs, bool _ConjRhs>
class Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >

Member Typedef Documentation

◆ _LhsPacket

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef packet_traits<LhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::_LhsPacket

◆ _ResPacket

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef packet_traits<ResScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::_ResPacket

◆ _RhsPacket

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef packet_traits<RhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::_RhsPacket

◆ AccPacket

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef ResPacket Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::AccPacket

◆ LhsPacket

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef conditional<Vectorizable,_LhsPacket,LhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::LhsPacket

◆ LhsScalar

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef _LhsScalar Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::LhsScalar

◆ ResPacket

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef conditional<Vectorizable,_ResPacket,ResScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::ResPacket

◆ ResScalar

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef ScalarBinaryOpTraits<LhsScalar,RhsScalar>::ReturnType Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::ResScalar

◆ RhsPacket

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef conditional<Vectorizable,_RhsPacket,RhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::RhsPacket

◆ RhsScalar

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
typedef _RhsScalar Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::RhsScalar

Member Enumeration Documentation

◆ anonymous enum

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
anonymous enum
Enumerator
ConjLhs 
ConjRhs 
Vectorizable 
LhsPacketSize 
RhsPacketSize 
ResPacketSize 
NumberOfRegisters 
nr 
default_mr 
mr 
LhsProgress 
RhsProgress 
358 {
359 ConjLhs = _ConjLhs,
360 ConjRhs = _ConjRhs,
365
367
368 // register block size along the N direction must be 1 or 4
369 nr = 4,
370
371 // register block size along the M direction (currently, this one cannot be modified)
373#if defined(EIGEN_HAS_SINGLE_INSTRUCTION_MADD) && !defined(EIGEN_VECTORIZE_ALTIVEC) && !defined(EIGEN_VECTORIZE_VSX)
374 // we assume 16 registers
375 // See bug 992, if the scalar type is not vectorizable but that EIGEN_HAS_SINGLE_INSTRUCTION_MADD is defined,
376 // then using 3*LhsPacketSize triggers non-implemented paths in syrk.
378#else
379 mr = default_mr,
380#endif
381
383 RhsProgress = 1
384 };
#define EIGEN_HAS_SINGLE_INSTRUCTION_MADD
Definition PacketMath.h:22
#define EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS
Definition PacketMath.h:31
#define EIGEN_PLAIN_ENUM_MIN(a, b)
Definition Macros.h:875
@ LhsPacketSize
Definition GeneralBlockPanelKernel.h:362
@ default_mr
Definition GeneralBlockPanelKernel.h:372
@ mr
Definition GeneralBlockPanelKernel.h:379
@ RhsPacketSize
Definition GeneralBlockPanelKernel.h:363
@ ResPacketSize
Definition GeneralBlockPanelKernel.h:364
@ LhsProgress
Definition GeneralBlockPanelKernel.h:382
@ ConjLhs
Definition GeneralBlockPanelKernel.h:359
@ nr
Definition GeneralBlockPanelKernel.h:369
@ RhsProgress
Definition GeneralBlockPanelKernel.h:383
@ NumberOfRegisters
Definition GeneralBlockPanelKernel.h:366
@ Vectorizable
Definition GeneralBlockPanelKernel.h:361
@ ConjRhs
Definition GeneralBlockPanelKernel.h:360
@ size
Definition GenericPacketMath.h:102
@ Vectorizable
Definition GenericPacketMath.h:101

Member Function Documentation

◆ acc() [1/2]

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::acc ( const AccPacket c,
const ResPacket alpha,
ResPacket r 
) const
inline
451 {
452 r = pmadd(c,alpha,r);
453 }
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition PacketMath.h:388

References Eigen::internal::pmadd().

Referenced by Eigen::internal::gebp_kernel< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ acc() [2/2]

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
template<typename ResPacketHalf >
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::acc ( const ResPacketHalf &  c,
const ResPacketHalf &  alpha,
ResPacketHalf &  r 
) const
inline
457 {
458 r = pmadd(c,alpha,r);
459 }

References Eigen::internal::pmadd().

+ Here is the call graph for this function:

◆ broadcastRhs()

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::broadcastRhs ( const RhsScalar b,
RhsPacket b0,
RhsPacket b1,
RhsPacket b2,
RhsPacket b3 
)
inline
402 {
403 pbroadcast4(b, b0, b1, b2, b3);
404 }
EIGEN_DEVICE_FUNC void pbroadcast4(const typename unpacket_traits< Packet >::type *a, Packet &a0, Packet &a1, Packet &a2, Packet &a3)
Definition GenericPacketMath.h:256

References Eigen::internal::pbroadcast4().

+ Here is the call graph for this function:

◆ initAcc()

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::initAcc ( AccPacket p)
inline
397 {
398 p = pset1<ResPacket>(ResScalar(0));
399 }
ScalarBinaryOpTraits< LhsScalar, RhsScalar >::ReturnType ResScalar
Definition GeneralBlockPanelKernel.h:356

Referenced by Eigen::internal::gebp_kernel< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

+ Here is the caller graph for this function:

◆ loadLhs()

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
template<typename LhsPacketType >
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::loadLhs ( const LhsScalar a,
LhsPacketType &  dest 
) const
inline
424 {
425 dest = pload<LhsPacketType>(a);
426 }

◆ loadLhsUnaligned()

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
template<typename LhsPacketType >
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::loadLhsUnaligned ( const LhsScalar a,
LhsPacketType &  dest 
) const
inline
430 {
431 dest = ploadu<LhsPacketType>(a);
432 }

Referenced by Eigen::internal::gebp_kernel< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

+ Here is the caller graph for this function:

◆ loadRhs()

◆ loadRhsQuad()

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::loadRhsQuad ( const RhsScalar b,
RhsPacket dest 
) const
inline
418 {
419 dest = ploadquad<RhsPacket>(b);
420 }

Referenced by Eigen::internal::gebp_kernel< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

+ Here is the caller graph for this function:

◆ madd()

template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
template<typename LhsPacketType , typename RhsPacketType , typename AccPacketType >
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::madd ( const LhsPacketType &  a,
const RhsPacketType &  b,
AccPacketType &  c,
AccPacketType &  tmp 
) const
inline
436 {
437 conj_helper<LhsPacketType,RhsPacketType,ConjLhs,ConjRhs> cj;
438 // It would be a lot cleaner to call pmadd all the time. Unfortunately if we
439 // let gcc allocate the register in which to store the result of the pmul
440 // (in the case where there is no FMA) gcc fails to figure out how to avoid
441 // spilling register.
442#ifdef EIGEN_HAS_SINGLE_INSTRUCTION_MADD
444 c = cj.pmadd(a,b,c);
445#else
446 tmp = b; tmp = cj.pmul(a,tmp); c = padd(c,tmp);
447#endif
448 }
#define EIGEN_UNUSED_VARIABLE(var)
Definition Macros.h:618
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:151

References EIGEN_UNUSED_VARIABLE, Eigen::internal::padd(), Eigen::internal::conj_helper< LhsScalar, RhsScalar, ConjLhs, ConjRhs >::pmadd(), and Eigen::internal::conj_helper< LhsScalar, RhsScalar, ConjLhs, ConjRhs >::pmul().

Referenced by Eigen::internal::gebp_kernel< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

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