33 #ifndef EIGEN_ASSIGN_VML_H    34 #define EIGEN_ASSIGN_VML_H    43 template<
typename Dst, 
typename Src, 
typename UnaryOp>
    51       StorageOrdersAgree = (int(Dst::IsRowMajor) == int(Src::IsRowMajor)),
    52       InnerSize = 
int(Dst::IsVectorAtCompileTime) ? int(Dst::SizeAtCompileTime)
    53                 : int(Dst::Flags)&
RowMajorBit ? int(Dst::ColsAtCompileTime)
    54                 : int(Dst::RowsAtCompileTime),
    55       InnerMaxSize  = int(Dst::IsVectorAtCompileTime) ? int(Dst::MaxSizeAtCompileTime)
    56                     : int(Dst::Flags)&
RowMajorBit ? int(Dst::MaxColsAtCompileTime)
    57                     : int(Dst::MaxRowsAtCompileTime),
    58       MaxSizeAtCompileTime = Dst::SizeAtCompileTime,
    60       MightEnableVml =  
vml_call<UnaryOp>::
IsSupported && StorageOrdersAgree && DstHasDirectAccess && SrcHasDirectAccess
    61                      && Src::InnerStrideAtCompileTime==1 && Dst::InnerStrideAtCompileTime==1,
    62       MightLinearize = MightEnableVml && (int(Dst::Flags) & int(Src::Flags) & 
LinearAccessBit),
    63       VmlSize = MightLinearize ? MaxSizeAtCompileTime : InnerMaxSize,
    64       LargeEnough = VmlSize==
Dynamic || VmlSize>=EIGEN_MKL_VML_THRESHOLD,
    65       MayEnableVml = MightEnableVml && LargeEnough,
    66       MayLinearize = MayEnableVml && MightLinearize
    76 template<
typename Derived1, 
typename Derived2, 
typename UnaryOp, 
int Traversal, 
int Unrolling,
    79   : 
assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>,Traversal,Unrolling,BuiltIn>
    83 template<
typename Derived1, 
typename Derived2, 
typename UnaryOp, 
int Traversal, 
int Unrolling>
    86   typedef typename Derived1::Scalar 
Scalar;
    87   typedef typename Derived1::Index 
Index;
    92     const Index innerSize = dst.innerSize();
    93     const Index outerSize = dst.outerSize();
    94     for(Index outer = 0; outer < outerSize; ++outer) {
    95       const Scalar *src_ptr = src.IsRowMajor ?  &(src.
nestedExpression().coeffRef(outer,0)) :
    97       Scalar *dst_ptr = dst.IsRowMajor ? &(dst.coeffRef(outer,0)) : &(dst.coeffRef(0, outer));
   103 template<
typename Derived1, 
typename Derived2, 
typename UnaryOp, 
int Traversal, 
int Unrolling>
   116 #define EIGEN_MKL_VML_SPECIALIZE_ASSIGN(TRAVERSAL,UNROLLING) \   117   template<typename Derived1, typename Derived2, typename UnaryOp> \   118   struct assign_impl<Derived1, Eigen::CwiseUnaryOp<UnaryOp, Derived2>, TRAVERSAL, UNROLLING, Specialized>  {  \   119     static inline void run(Derived1 &dst, const Eigen::CwiseUnaryOp<UnaryOp, Derived2> &src) { \   120       vml_assign_impl<Derived1,Derived2,UnaryOp,TRAVERSAL,UNROLLING>::run(dst, src); \   137 #if !defined (EIGEN_FAST_MATH) || (EIGEN_FAST_MATH != 1)   138 #define  EIGEN_MKL_VML_MODE VML_HA   140 #define  EIGEN_MKL_VML_MODE VML_LA   143 #define EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE)     \   144   template<> struct vml_call< scalar_##EIGENOP##_op<EIGENTYPE> > {               \   145     enum { IsSupported = 1 };                                                    \   146     static inline void run( const scalar_##EIGENOP##_op<EIGENTYPE>& ,        \   147                             int size, const EIGENTYPE* src, EIGENTYPE* dst) {    \   148       VMLOP(size, (const VMLTYPE*)src, (VMLTYPE*)dst);                           \   152 #define EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE)  \   153   template<> struct vml_call< scalar_##EIGENOP##_op<EIGENTYPE> > {               \   154     enum { IsSupported = 1 };                                                    \   155     static inline void run( const scalar_##EIGENOP##_op<EIGENTYPE>& ,        \   156                             int size, const EIGENTYPE* src, EIGENTYPE* dst) {    \   157       MKL_INT64 vmlMode = EIGEN_MKL_VML_MODE;                                    \   158       VMLOP(size, (const VMLTYPE*)src, (VMLTYPE*)dst, vmlMode);                  \   162 #define EIGEN_MKL_VML_DECLARE_POW_CALL(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE)       \   163   template<> struct vml_call< scalar_##EIGENOP##_op<EIGENTYPE> > {               \   164     enum { IsSupported = 1 };                                                    \   165     static inline void run( const scalar_##EIGENOP##_op<EIGENTYPE>& func,        \   166                           int size, const EIGENTYPE* src, EIGENTYPE* dst) {      \   167       EIGENTYPE exponent = func.m_exponent;                                      \   168       MKL_INT64 vmlMode = EIGEN_MKL_VML_MODE;                                    \   169       VMLOP(&size, (const VMLTYPE*)src, (const VMLTYPE*)&exponent,               \   170                         (VMLTYPE*)dst, &vmlMode);                                \   174 #define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(EIGENOP, VMLOP)                   \   175   EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vs##VMLOP, float, float)             \   176   EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vd##VMLOP, double, double)   178 #define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX(EIGENOP, VMLOP)                \   179   EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vc##VMLOP, scomplex, MKL_Complex8)   \   180   EIGEN_MKL_VML_DECLARE_UNARY_CALL(EIGENOP, vz##VMLOP, dcomplex, MKL_Complex16)   182 #define EIGEN_MKL_VML_DECLARE_UNARY_CALLS(EIGENOP, VMLOP)                        \   183   EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(EIGENOP, VMLOP)                         \   184   EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX(EIGENOP, VMLOP)   187 #define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL_LA(EIGENOP, VMLOP)                \   188   EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vms##VMLOP, float, float)         \   189   EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vmd##VMLOP, double, double)   191 #define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX_LA(EIGENOP, VMLOP)             \   192   EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vmc##VMLOP, scomplex, MKL_Complex8)  \   193   EIGEN_MKL_VML_DECLARE_UNARY_CALL_LA(EIGENOP, vmz##VMLOP, dcomplex, MKL_Complex16)   195 #define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(EIGENOP, VMLOP)                     \   196   EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL_LA(EIGENOP, VMLOP)                      \   197   EIGEN_MKL_VML_DECLARE_UNARY_CALLS_COMPLEX_LA(EIGENOP, VMLOP)   224 #endif // EIGEN_ASSIGN_VML_H 
const UnaryOp & functor() const 
#define EIGEN_MKL_VML_DECLARE_POW_CALL(EIGENOP, VMLOP, EIGENTYPE, VMLTYPE)
#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_LA(EIGENOP, VMLOP)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_pow_op< typename Derived::Scalar >, const Derived > pow(const Eigen::ArrayBase< Derived > &x, const typename Derived::Scalar &exponent)
#define EIGEN_MKL_VML_DECLARE_UNARY_CALLS_REAL(EIGENOP, VMLOP)
const internal::remove_all< typename XprType::Nested >::type & nestedExpression() const 
const unsigned int DirectAccessBit
const unsigned int RowMajorBit
const CwiseUnaryOp< internal::scalar_square_op< Scalar >, const Derived > square() const 
const CwiseUnaryOp< internal::scalar_tan_op< Scalar >, Derived > tan() const 
const CwiseUnaryOp< internal::scalar_log_op< Scalar >, const Derived > log() const 
const CwiseUnaryOp< internal::scalar_sin_op< Scalar >, const Derived > sin() const 
#define EIGEN_MKL_VML_SPECIALIZE_ASSIGN(TRAVERSAL, UNROLLING)
const CwiseUnaryOp< internal::scalar_cos_op< Scalar >, const Derived > cos() const 
const CwiseUnaryOp< internal::scalar_sqrt_op< Scalar >, const Derived > sqrt() const 
const CwiseUnaryOp< internal::scalar_exp_op< Scalar >, const Derived > exp() const 
const CwiseUnaryOp< internal::scalar_asin_op< Scalar >, const Derived > asin() const 
Generic expression where a coefficient-wise unary operator is applied to an expression. 
const CwiseUnaryOp< internal::scalar_acos_op< Scalar >, const Derived > acos() const 
static void run(Derived1 &dst, const CwiseUnaryOp< UnaryOp, Derived2 > &src)
static void run(Derived1 &dst, const CwiseUnaryOp< UnaryOp, Derived2 > &src)
const unsigned int LinearAccessBit