MOAB  4.9.3pre
Eigen::internal::gebp_traits< _LhsScalar, _RhsScalar, _ConjLhs, _ConjRhs > Class Template Reference

#include <GeneralBlockPanelKernel.h>

List of all members.

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

Detailed Description

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

Definition at line 364 of file GeneralBlockPanelKernel.h.


Member Typedef Documentation

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

Definition at line 399 of file GeneralBlockPanelKernel.h.

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

Definition at line 401 of file GeneralBlockPanelKernel.h.

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

Definition at line 400 of file GeneralBlockPanelKernel.h.

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

Definition at line 407 of file GeneralBlockPanelKernel.h.

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

Definition at line 403 of file GeneralBlockPanelKernel.h.

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

Definition at line 367 of file GeneralBlockPanelKernel.h.

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

Definition at line 405 of file GeneralBlockPanelKernel.h.

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

Definition at line 369 of file GeneralBlockPanelKernel.h.

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

Definition at line 404 of file GeneralBlockPanelKernel.h.

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

Definition at line 368 of file GeneralBlockPanelKernel.h.


Member Enumeration Documentation

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 

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
  };

Member Function Documentation

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]

Definition at line 462 of file GeneralBlockPanelKernel.h.

  {
    r = pmadd(c,alpha,r);
  }
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]

Definition at line 468 of file GeneralBlockPanelKernel.h.

  {
    r = pmadd(c,alpha,r);
  }
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]

Definition at line 414 of file GeneralBlockPanelKernel.h.

  {
    pbroadcast4(b, b0, b1, b2, b3);
  }
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]

Definition at line 409 of file GeneralBlockPanelKernel.h.

  {
    p = pset1<ResPacket>(ResScalar(0));
  }
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]

Definition at line 436 of file GeneralBlockPanelKernel.h.

  {
    dest = pload<LhsPacketType>(a);
  }
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]

Definition at line 442 of file GeneralBlockPanelKernel.h.

  {
    dest = ploadu<LhsPacketType>(a);
  }
template<typename _LhsScalar , typename _RhsScalar , bool _ConjLhs, bool _ConjRhs>
template<typename RhsPacketType >
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);
  }
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]

Definition at line 430 of file GeneralBlockPanelKernel.h.

  {
    dest = ploadquad<RhsPacket>(b);
  }
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]

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
  }

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines