MOAB
4.9.3pre
|
#include <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 scalar_product_traits < 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 |
Definition at line 364 of file GeneralBlockPanelKernel.h.
typedef packet_traits<LhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::_LhsPacket |
Definition at line 399 of file GeneralBlockPanelKernel.h.
typedef packet_traits<ResScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::_ResPacket |
Definition at line 401 of file GeneralBlockPanelKernel.h.
typedef packet_traits<RhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::_RhsPacket |
Definition at line 400 of file GeneralBlockPanelKernel.h.
typedef ResPacket Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::AccPacket |
Definition at line 407 of file GeneralBlockPanelKernel.h.
typedef conditional<Vectorizable,_LhsPacket,LhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::LhsPacket |
Definition at line 403 of file GeneralBlockPanelKernel.h.
typedef _LhsScalar Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::LhsScalar |
Definition at line 367 of file GeneralBlockPanelKernel.h.
typedef conditional<Vectorizable,_ResPacket,ResScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::ResPacket |
Definition at line 405 of file GeneralBlockPanelKernel.h.
typedef scalar_product_traits<LhsScalar, RhsScalar>::ReturnType Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::ResScalar |
Definition at line 369 of file GeneralBlockPanelKernel.h.
typedef conditional<Vectorizable,_RhsPacket,RhsScalar>::type Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::RhsPacket |
Definition at line 404 of file GeneralBlockPanelKernel.h.
typedef _RhsScalar Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::RhsScalar |
Definition at line 368 of file GeneralBlockPanelKernel.h.
anonymous enum |
ConjLhs | |
ConjRhs | |
Vectorizable | |
LhsPacketSize | |
RhsPacketSize | |
ResPacketSize | |
NumberOfRegisters | |
nr | |
default_mr | |
mr | |
LhsProgress | |
RhsProgress |
Definition at line 371 of file GeneralBlockPanelKernel.h.
{ 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, // register block size along the N direction must be 1 or 4 nr = 4, // register block size along the M direction (currently, this one cannot be modified) default_mr = (EIGEN_PLAIN_ENUM_MIN(16,NumberOfRegisters)/2/nr)*LhsPacketSize, #if defined(EIGEN_HAS_SINGLE_INSTRUCTION_MADD) && !defined(EIGEN_VECTORIZE_ALTIVEC) && !defined(EIGEN_VECTORIZE_VSX) // we assume 16 registers // See bug 992, if the scalar type is not vectorizable but that EIGEN_HAS_SINGLE_INSTRUCTION_MADD is defined, // then using 3*LhsPacketSize triggers non-implemented paths in syrk. mr = Vectorizable ? 3*LhsPacketSize : default_mr, #else mr = default_mr, #endif LhsProgress = LhsPacketSize, RhsProgress = 1 };
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::acc | ( | const AccPacket & | c, |
const ResPacket & | alpha, | ||
ResPacket & | r | ||
) | const [inline] |
Definition at line 462 of file GeneralBlockPanelKernel.h.
{ r = pmadd(c,alpha,r); }
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::acc | ( | const ResPacketHalf & | c, |
const ResPacketHalf & | alpha, | ||
ResPacketHalf & | r | ||
) | const [inline] |
Definition at line 468 of file GeneralBlockPanelKernel.h.
{ r = pmadd(c,alpha,r); }
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] |
Definition at line 414 of file GeneralBlockPanelKernel.h.
{ pbroadcast4(b, b0, b1, b2, b3); }
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::initAcc | ( | AccPacket & | p | ) | [inline] |
Definition at line 409 of file GeneralBlockPanelKernel.h.
{ p = pset1<ResPacket>(ResScalar(0)); }
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::loadLhs | ( | const LhsScalar * | a, |
LhsPacketType & | dest | ||
) | const [inline] |
Definition at line 436 of file GeneralBlockPanelKernel.h.
{ dest = pload<LhsPacketType>(a); }
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::loadLhsUnaligned | ( | const LhsScalar * | a, |
LhsPacketType & | dest | ||
) | const [inline] |
Definition at line 442 of file GeneralBlockPanelKernel.h.
{ dest = ploadu<LhsPacketType>(a); }
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::loadRhs | ( | const RhsScalar * | b, |
RhsPacketType & | dest | ||
) | const [inline] |
Definition at line 425 of file GeneralBlockPanelKernel.h.
{ dest = pset1<RhsPacketType>(*b); }
EIGEN_STRONG_INLINE void Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs >::loadRhsQuad | ( | const RhsScalar * | b, |
RhsPacket & | dest | ||
) | const [inline] |
Definition at line 430 of file GeneralBlockPanelKernel.h.
{ dest = ploadquad<RhsPacket>(b); }
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] |
Definition at line 448 of file GeneralBlockPanelKernel.h.
{ // It would be a lot cleaner to call pmadd all the time. Unfortunately if we // let gcc allocate the register in which to store the result of the pmul // (in the case where there is no FMA) gcc fails to figure out how to avoid // spilling register. #ifdef EIGEN_HAS_SINGLE_INSTRUCTION_MADD EIGEN_UNUSED_VARIABLE(tmp); c = pmadd(a,b,c); #else tmp = b; tmp = pmul(a,tmp); c = padd(c,tmp); #endif }