Eliminate use of _res.
This commit is contained in:
		
							parent
							
								
									a96545777b
								
							
						
					
					
						commit
						5bdf58b8df
					
				| @ -62,9 +62,9 @@ typedef gebp_traits<LhsScalar,RhsScalar> Traits; | ||||
| 
 | ||||
| typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar>::ReturnType ResScalar; | ||||
| static void run(Index rows, Index cols, Index depth, | ||||
|   const LhsScalar* _lhs, Index lhsStride, | ||||
|   const RhsScalar* _rhs, Index rhsStride, | ||||
|   ResScalar* _res, Index resIncr, Index resStride, | ||||
|   const LhsScalar* lhs_, Index lhsStride, | ||||
|   const RhsScalar* rhs_, Index rhsStride, | ||||
|   ResScalar* res_, Index resIncr, Index resStride, | ||||
|   ResScalar alpha, | ||||
|   level3_blocking<LhsScalar,RhsScalar>& blocking, | ||||
|   GemmParallelInfo<Index>* info = 0) | ||||
| @ -72,9 +72,9 @@ static void run(Index rows, Index cols, Index depth, | ||||
|   typedef const_blas_data_mapper<LhsScalar, Index, LhsStorageOrder> LhsMapper; | ||||
|   typedef const_blas_data_mapper<RhsScalar, Index, RhsStorageOrder> RhsMapper; | ||||
|   typedef blas_data_mapper<typename Traits::ResScalar, Index, ColMajor,Unaligned,ResInnerStride> ResMapper; | ||||
|   LhsMapper lhs(_lhs, lhsStride); | ||||
|   RhsMapper rhs(_rhs, rhsStride); | ||||
|   ResMapper res(_res, resStride, resIncr); | ||||
|   LhsMapper lhs(lhs_, lhsStride); | ||||
|   RhsMapper rhs(rhs_, rhsStride); | ||||
|   ResMapper res(res_, resStride, resIncr); | ||||
| 
 | ||||
|   Index kc = blocking.kc();                   // cache block size along the K direction
 | ||||
|   Index mc = (std::min)(rows,blocking.mc());  // cache block size along the M direction
 | ||||
|  | ||||
| @ -63,9 +63,9 @@ template <typename Index, typename LhsScalar, int LhsStorageOrder, bool Conjugat | ||||
| struct general_matrix_matrix_triangular_product<Index,LhsScalar,LhsStorageOrder,ConjugateLhs,RhsScalar,RhsStorageOrder,ConjugateRhs,ColMajor,ResInnerStride,UpLo,Version> | ||||
| { | ||||
|   typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar>::ReturnType ResScalar; | ||||
|   static EIGEN_STRONG_INLINE void run(Index size, Index depth,const LhsScalar* _lhs, Index lhsStride, | ||||
|                                       const RhsScalar* _rhs, Index rhsStride, | ||||
|                                       ResScalar* _res, Index resIncr, Index resStride, | ||||
|   static EIGEN_STRONG_INLINE void run(Index size, Index depth,const LhsScalar* lhs_, Index lhsStride, | ||||
|                                       const RhsScalar* rhs_, Index rhsStride, | ||||
|                                       ResScalar* res_, Index resIncr, Index resStride, | ||||
|                                       const ResScalar& alpha, level3_blocking<LhsScalar,RhsScalar>& blocking) | ||||
|   { | ||||
|     typedef gebp_traits<LhsScalar,RhsScalar> Traits; | ||||
| @ -73,9 +73,9 @@ struct general_matrix_matrix_triangular_product<Index,LhsScalar,LhsStorageOrder, | ||||
|     typedef const_blas_data_mapper<LhsScalar, Index, LhsStorageOrder> LhsMapper; | ||||
|     typedef const_blas_data_mapper<RhsScalar, Index, RhsStorageOrder> RhsMapper; | ||||
|     typedef blas_data_mapper<typename Traits::ResScalar, Index, ColMajor, Unaligned, ResInnerStride> ResMapper; | ||||
|     LhsMapper lhs(_lhs,lhsStride); | ||||
|     RhsMapper rhs(_rhs,rhsStride); | ||||
|     ResMapper res(_res, resStride, resIncr); | ||||
|     LhsMapper lhs(lhs_,lhsStride); | ||||
|     RhsMapper rhs(rhs_,rhsStride); | ||||
|     ResMapper res(res_, resStride, resIncr); | ||||
| 
 | ||||
|     Index kc = blocking.kc(); | ||||
|     Index mc = (std::min)(size,blocking.mc()); | ||||
| @ -116,7 +116,7 @@ struct general_matrix_matrix_triangular_product<Index,LhsScalar,LhsStorageOrder, | ||||
|           gebp(res.getSubMapper(i2, 0), blockA, blockB, actual_mc, actual_kc, | ||||
|                (std::min)(size,i2), alpha, -1, -1, 0, 0); | ||||
| 
 | ||||
|         sybb(_res+resStride*i2 + resIncr*i2, resIncr, resStride, blockA, blockB + actual_kc*i2, actual_mc, actual_kc, alpha); | ||||
|         sybb(res_+resStride*i2 + resIncr*i2, resIncr, resStride, blockA, blockB + actual_kc*i2, actual_mc, actual_kc, alpha); | ||||
| 
 | ||||
|         if (UpLo==Upper) | ||||
|         { | ||||
| @ -147,11 +147,11 @@ struct tribb_kernel | ||||
|   enum { | ||||
|     BlockSize  = meta_least_common_multiple<plain_enum_max(mr, nr), plain_enum_min(mr,nr)>::ret | ||||
|   }; | ||||
|   void operator()(ResScalar* _res, Index resIncr, Index resStride, const LhsScalar* blockA, const RhsScalar* blockB, Index size, Index depth, const ResScalar& alpha) | ||||
|   void operator()(ResScalar* res_, Index resIncr, Index resStride, const LhsScalar* blockA, const RhsScalar* blockB, Index size, Index depth, const ResScalar& alpha) | ||||
|   { | ||||
|     typedef blas_data_mapper<ResScalar, Index, ColMajor, Unaligned, ResInnerStride> ResMapper; | ||||
|     typedef blas_data_mapper<ResScalar, Index, ColMajor, Unaligned> BufferMapper; | ||||
|     ResMapper res(_res, resStride, resIncr); | ||||
|     ResMapper res(res_, resStride, resIncr); | ||||
|     gebp_kernel<LhsScalar, RhsScalar, Index, ResMapper, mr, nr, ConjLhs, ConjRhs> gebp_kernel1; | ||||
|     gebp_kernel<LhsScalar, RhsScalar, Index, BufferMapper, mr, nr, ConjLhs, ConjRhs> gebp_kernel2; | ||||
| 
 | ||||
|  | ||||
| @ -46,7 +46,7 @@ struct symm_pack_lhs | ||||
|       for(Index w=0; w<BlockRows; w++) | ||||
|         blockA[count++] = numext::conj(lhs(k, i+w)); // transposed
 | ||||
|   } | ||||
|   void operator()(Scalar* blockA, const Scalar* _lhs, Index lhsStride, Index cols, Index rows) | ||||
|   void operator()(Scalar* blockA, const Scalar* lhs_, Index lhsStride, Index cols, Index rows) | ||||
|   { | ||||
|     typedef typename unpacket_traits<typename packet_traits<Scalar>::type>::half HalfPacket; | ||||
|     typedef typename unpacket_traits<typename unpacket_traits<typename packet_traits<Scalar>::type>::half>::half QuarterPacket; | ||||
| @ -56,7 +56,7 @@ struct symm_pack_lhs | ||||
|            HasHalf = (int)HalfPacketSize < (int)PacketSize, | ||||
|            HasQuarter = (int)QuarterPacketSize < (int)HalfPacketSize}; | ||||
| 
 | ||||
|     const_blas_data_mapper<Scalar,Index,StorageOrder> lhs(_lhs,lhsStride); | ||||
|     const_blas_data_mapper<Scalar,Index,StorageOrder> lhs(lhs_,lhsStride); | ||||
|     Index count = 0; | ||||
|     //Index peeled_mc3 = (rows/Pack1)*Pack1;
 | ||||
|      | ||||
| @ -104,11 +104,11 @@ template<typename Scalar, typename Index, int nr, int StorageOrder> | ||||
| struct symm_pack_rhs | ||||
| { | ||||
|   enum { PacketSize = packet_traits<Scalar>::size }; | ||||
|   void operator()(Scalar* blockB, const Scalar* _rhs, Index rhsStride, Index rows, Index cols, Index k2) | ||||
|   void operator()(Scalar* blockB, const Scalar* rhs_, Index rhsStride, Index rows, Index cols, Index k2) | ||||
|   { | ||||
|     Index end_k = k2 + rows; | ||||
|     Index count = 0; | ||||
|     const_blas_data_mapper<Scalar,Index,StorageOrder> rhs(_rhs,rhsStride); | ||||
|     const_blas_data_mapper<Scalar,Index,StorageOrder> rhs(rhs_,rhsStride); | ||||
|     Index packet_cols8 = nr>=8 ? (cols/8) * 8 : 0; | ||||
|     Index packet_cols4 = nr>=4 ? (cols/4) * 4 : 0; | ||||
| 
 | ||||
| @ -333,8 +333,8 @@ struct product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,true,ConjugateLhs | ||||
| 
 | ||||
|   static EIGEN_DONT_INLINE void run( | ||||
|     Index rows, Index cols, | ||||
|     const Scalar* _lhs, Index lhsStride, | ||||
|     const Scalar* _rhs, Index rhsStride, | ||||
|     const Scalar* lhs_, Index lhsStride, | ||||
|     const Scalar* rhs_, Index rhsStride, | ||||
|     Scalar* res,        Index resIncr, Index resStride, | ||||
|     const Scalar& alpha, level3_blocking<Scalar,Scalar>& blocking); | ||||
| }; | ||||
| @ -345,9 +345,9 @@ template <typename Scalar, typename Index, | ||||
|           int ResInnerStride> | ||||
| EIGEN_DONT_INLINE void product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,true,ConjugateLhs, RhsStorageOrder,false,ConjugateRhs,ColMajor,ResInnerStride>::run( | ||||
|     Index rows, Index cols, | ||||
|     const Scalar* _lhs, Index lhsStride, | ||||
|     const Scalar* _rhs, Index rhsStride, | ||||
|     Scalar* _res,       Index resIncr, Index resStride, | ||||
|     const Scalar* lhs_, Index lhsStride, | ||||
|     const Scalar* rhs_, Index rhsStride, | ||||
|     Scalar* res_,       Index resIncr, Index resStride, | ||||
|     const Scalar& alpha, level3_blocking<Scalar,Scalar>& blocking) | ||||
|   { | ||||
|     Index size = rows; | ||||
| @ -358,10 +358,10 @@ EIGEN_DONT_INLINE void product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,t | ||||
|     typedef const_blas_data_mapper<Scalar, Index, (LhsStorageOrder == RowMajor) ? ColMajor : RowMajor> LhsTransposeMapper; | ||||
|     typedef const_blas_data_mapper<Scalar, Index, RhsStorageOrder> RhsMapper; | ||||
|     typedef blas_data_mapper<typename Traits::ResScalar, Index, ColMajor, Unaligned, ResInnerStride> ResMapper; | ||||
|     LhsMapper lhs(_lhs,lhsStride); | ||||
|     LhsTransposeMapper lhs_transpose(_lhs,lhsStride); | ||||
|     RhsMapper rhs(_rhs,rhsStride); | ||||
|     ResMapper res(_res, resStride, resIncr); | ||||
|     LhsMapper lhs(lhs_,lhsStride); | ||||
|     LhsTransposeMapper lhs_transpose(lhs_,lhsStride); | ||||
|     RhsMapper rhs(rhs_,rhsStride); | ||||
|     ResMapper res(res_, resStride, resIncr); | ||||
| 
 | ||||
|     Index kc = blocking.kc();                   // cache block size along the K direction
 | ||||
|     Index mc = (std::min)(rows,blocking.mc());  // cache block size along the M direction
 | ||||
| @ -428,8 +428,8 @@ struct product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,false,ConjugateLh | ||||
| 
 | ||||
|   static EIGEN_DONT_INLINE void run( | ||||
|     Index rows, Index cols, | ||||
|     const Scalar* _lhs, Index lhsStride, | ||||
|     const Scalar* _rhs, Index rhsStride, | ||||
|     const Scalar* lhs_, Index lhsStride, | ||||
|     const Scalar* rhs_, Index rhsStride, | ||||
|     Scalar* res,        Index resIncr, Index resStride, | ||||
|     const Scalar& alpha, level3_blocking<Scalar,Scalar>& blocking); | ||||
| }; | ||||
| @ -440,9 +440,9 @@ template <typename Scalar, typename Index, | ||||
|           int ResInnerStride> | ||||
| EIGEN_DONT_INLINE void product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,false,ConjugateLhs, RhsStorageOrder,true,ConjugateRhs,ColMajor,ResInnerStride>::run( | ||||
|     Index rows, Index cols, | ||||
|     const Scalar* _lhs, Index lhsStride, | ||||
|     const Scalar* _rhs, Index rhsStride, | ||||
|     Scalar* _res,       Index resIncr, Index resStride, | ||||
|     const Scalar* lhs_, Index lhsStride, | ||||
|     const Scalar* rhs_, Index rhsStride, | ||||
|     Scalar* res_,       Index resIncr, Index resStride, | ||||
|     const Scalar& alpha, level3_blocking<Scalar,Scalar>& blocking) | ||||
|   { | ||||
|     Index size = cols; | ||||
| @ -451,8 +451,8 @@ EIGEN_DONT_INLINE void product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,f | ||||
| 
 | ||||
|     typedef const_blas_data_mapper<Scalar, Index, LhsStorageOrder> LhsMapper; | ||||
|     typedef blas_data_mapper<typename Traits::ResScalar, Index, ColMajor, Unaligned, ResInnerStride> ResMapper; | ||||
|     LhsMapper lhs(_lhs,lhsStride); | ||||
|     ResMapper res(_res,resStride, resIncr); | ||||
|     LhsMapper lhs(lhs_,lhsStride); | ||||
|     ResMapper res(res_,resStride, resIncr); | ||||
| 
 | ||||
|     Index kc = blocking.kc();                   // cache block size along the K direction
 | ||||
|     Index mc = (std::min)(rows,blocking.mc());  // cache block size along the M direction
 | ||||
| @ -469,7 +469,7 @@ EIGEN_DONT_INLINE void product_selfadjoint_matrix<Scalar,Index,LhsStorageOrder,f | ||||
|     { | ||||
|       const Index actual_kc = (std::min)(k2+kc,size)-k2; | ||||
| 
 | ||||
|       pack_rhs(blockB, _rhs, rhsStride, actual_kc, cols, k2); | ||||
|       pack_rhs(blockB, rhs_, rhsStride, actual_kc, cols, k2); | ||||
| 
 | ||||
|       // => GEPP
 | ||||
|       for(Index i2=0; i2<rows; i2+=mc) | ||||
|  | ||||
| @ -27,15 +27,15 @@ struct triangular_matrix_vector_product<Index,Mode,LhsScalar,ConjLhs,RhsScalar,C | ||||
|   static constexpr bool IsLower = ((Mode & Lower) == Lower); | ||||
|   static constexpr bool HasUnitDiag = (Mode & UnitDiag) == UnitDiag; | ||||
|   static constexpr bool HasZeroDiag = (Mode & ZeroDiag) == ZeroDiag; | ||||
|   static EIGEN_DONT_INLINE void run(Index _rows, Index _cols, const LhsScalar* _lhs, Index lhsStride, | ||||
|                                     const RhsScalar* _rhs, Index rhsIncr, ResScalar* _res, Index resIncr, | ||||
|   static EIGEN_DONT_INLINE void run(Index _rows, Index _cols, const LhsScalar* lhs_, Index lhsStride, | ||||
|                                     const RhsScalar* rhs_, Index rhsIncr, ResScalar* res_, Index resIncr, | ||||
|                                     const RhsScalar& alpha); | ||||
| }; | ||||
| 
 | ||||
| template<typename Index, int Mode, typename LhsScalar, bool ConjLhs, typename RhsScalar, bool ConjRhs, int Version> | ||||
| EIGEN_DONT_INLINE void triangular_matrix_vector_product<Index,Mode,LhsScalar,ConjLhs,RhsScalar,ConjRhs,ColMajor,Version> | ||||
|   ::run(Index _rows, Index _cols, const LhsScalar* _lhs, Index lhsStride, | ||||
|         const RhsScalar* _rhs, Index rhsIncr, ResScalar* _res, Index resIncr, const RhsScalar& alpha) | ||||
|   ::run(Index _rows, Index _cols, const LhsScalar* lhs_, Index lhsStride, | ||||
|         const RhsScalar* rhs_, Index rhsIncr, ResScalar* res_, Index resIncr, const RhsScalar& alpha) | ||||
|   { | ||||
|     static const Index PanelWidth = EIGEN_TUNE_TRIANGULAR_PANEL_WIDTH; | ||||
|     Index size = (std::min)(_rows,_cols); | ||||
| @ -43,15 +43,15 @@ EIGEN_DONT_INLINE void triangular_matrix_vector_product<Index,Mode,LhsScalar,Con | ||||
|     Index cols = IsLower ? (std::min)(_rows,_cols) : _cols; | ||||
| 
 | ||||
|     typedef Map<const Matrix<LhsScalar,Dynamic,Dynamic,ColMajor>, 0, OuterStride<> > LhsMap; | ||||
|     const LhsMap lhs(_lhs,rows,cols,OuterStride<>(lhsStride)); | ||||
|     const LhsMap lhs(lhs_,rows,cols,OuterStride<>(lhsStride)); | ||||
|     typename conj_expr_if<ConjLhs,LhsMap>::type cjLhs(lhs); | ||||
| 
 | ||||
|     typedef Map<const Matrix<RhsScalar,Dynamic,1>, 0, InnerStride<> > RhsMap; | ||||
|     const RhsMap rhs(_rhs,cols,InnerStride<>(rhsIncr)); | ||||
|     const RhsMap rhs(rhs_,cols,InnerStride<>(rhsIncr)); | ||||
|     typename conj_expr_if<ConjRhs,RhsMap>::type cjRhs(rhs); | ||||
| 
 | ||||
|     typedef Map<Matrix<ResScalar,Dynamic,1> > ResMap; | ||||
|     ResMap res(_res,rows); | ||||
|     ResMap res(res_,rows); | ||||
| 
 | ||||
|     typedef const_blas_data_mapper<LhsScalar,Index,ColMajor> LhsMapper; | ||||
|     typedef const_blas_data_mapper<RhsScalar,Index,RowMajor> RhsMapper; | ||||
| @ -86,7 +86,7 @@ EIGEN_DONT_INLINE void triangular_matrix_vector_product<Index,Mode,LhsScalar,Con | ||||
|           rows, cols-size, | ||||
|           LhsMapper(&lhs.coeffRef(0,size), lhsStride), | ||||
|           RhsMapper(&rhs.coeffRef(size), rhsIncr), | ||||
|           _res, resIncr, alpha); | ||||
|           res_, resIncr, alpha); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -97,15 +97,15 @@ struct triangular_matrix_vector_product<Index,Mode,LhsScalar,ConjLhs,RhsScalar,C | ||||
|   static constexpr bool IsLower = ((Mode & Lower) == Lower); | ||||
|   static constexpr bool HasUnitDiag = (Mode & UnitDiag) == UnitDiag; | ||||
|   static constexpr bool HasZeroDiag = (Mode & ZeroDiag) == ZeroDiag; | ||||
|   static EIGEN_DONT_INLINE void run(Index _rows, Index _cols, const LhsScalar* _lhs, Index lhsStride, | ||||
|                                     const RhsScalar* _rhs, Index rhsIncr, ResScalar* _res, Index resIncr, | ||||
|   static EIGEN_DONT_INLINE void run(Index _rows, Index _cols, const LhsScalar* lhs_, Index lhsStride, | ||||
|                                     const RhsScalar* rhs_, Index rhsIncr, ResScalar* res_, Index resIncr, | ||||
|                                     const ResScalar& alpha); | ||||
| }; | ||||
| 
 | ||||
| template<typename Index, int Mode, typename LhsScalar, bool ConjLhs, typename RhsScalar, bool ConjRhs,int Version> | ||||
| EIGEN_DONT_INLINE void triangular_matrix_vector_product<Index,Mode,LhsScalar,ConjLhs,RhsScalar,ConjRhs,RowMajor,Version> | ||||
|   ::run(Index _rows, Index _cols, const LhsScalar* _lhs, Index lhsStride, | ||||
|         const RhsScalar* _rhs, Index rhsIncr, ResScalar* _res, Index resIncr, const ResScalar& alpha) | ||||
|   ::run(Index _rows, Index _cols, const LhsScalar* lhs_, Index lhsStride, | ||||
|         const RhsScalar* rhs_, Index rhsIncr, ResScalar* res_, Index resIncr, const ResScalar& alpha) | ||||
|   { | ||||
|     static const Index PanelWidth = EIGEN_TUNE_TRIANGULAR_PANEL_WIDTH; | ||||
|     Index diagSize = (std::min)(_rows,_cols); | ||||
| @ -113,15 +113,15 @@ EIGEN_DONT_INLINE void triangular_matrix_vector_product<Index,Mode,LhsScalar,Con | ||||
|     Index cols = IsLower ? diagSize : _cols; | ||||
| 
 | ||||
|     typedef Map<const Matrix<LhsScalar,Dynamic,Dynamic,RowMajor>, 0, OuterStride<> > LhsMap; | ||||
|     const LhsMap lhs(_lhs,rows,cols,OuterStride<>(lhsStride)); | ||||
|     const LhsMap lhs(lhs_,rows,cols,OuterStride<>(lhsStride)); | ||||
|     typename conj_expr_if<ConjLhs,LhsMap>::type cjLhs(lhs); | ||||
| 
 | ||||
|     typedef Map<const Matrix<RhsScalar,Dynamic,1> > RhsMap; | ||||
|     const RhsMap rhs(_rhs,cols); | ||||
|     const RhsMap rhs(rhs_,cols); | ||||
|     typename conj_expr_if<ConjRhs,RhsMap>::type cjRhs(rhs); | ||||
| 
 | ||||
|     typedef Map<Matrix<ResScalar,Dynamic,1>, 0, InnerStride<> > ResMap; | ||||
|     ResMap res(_res,rows,InnerStride<>(resIncr)); | ||||
|     ResMap res(res_,rows,InnerStride<>(resIncr)); | ||||
| 
 | ||||
|     typedef const_blas_data_mapper<LhsScalar,Index,RowMajor> LhsMapper; | ||||
|     typedef const_blas_data_mapper<RhsScalar,Index,RowMajor> RhsMapper; | ||||
|  | ||||
| @ -53,18 +53,18 @@ struct triangular_matrix_vector_product_trmv : | ||||
| #define EIGEN_BLAS_TRMV_SPECIALIZE(Scalar) \ | ||||
| template<typename Index, int Mode, bool ConjLhs, bool ConjRhs> \ | ||||
| struct triangular_matrix_vector_product<Index,Mode,Scalar,ConjLhs,Scalar,ConjRhs,ColMajor,Specialized> { \ | ||||
|  static void run(Index _rows, Index _cols, const Scalar* _lhs, Index lhsStride, \ | ||||
|                                      const Scalar* _rhs, Index rhsIncr, Scalar* _res, Index resIncr, Scalar alpha) { \ | ||||
|  static void run(Index rows_, Index cols_, const Scalar* lhs_, Index lhsStride, \ | ||||
|                                      const Scalar* rhs_, Index rhsIncr, Scalar* res_, Index resIncr, Scalar alpha) { \ | ||||
|       triangular_matrix_vector_product_trmv<Index,Mode,Scalar,ConjLhs,Scalar,ConjRhs,ColMajor>::run( \ | ||||
|         _rows, _cols, _lhs, lhsStride, _rhs, rhsIncr, _res, resIncr, alpha); \ | ||||
|         rows_, cols_, lhs_, lhsStride, rhs_, rhsIncr, res_, resIncr, alpha); \ | ||||
|   } \ | ||||
| }; \ | ||||
| template<typename Index, int Mode, bool ConjLhs, bool ConjRhs> \ | ||||
| struct triangular_matrix_vector_product<Index,Mode,Scalar,ConjLhs,Scalar,ConjRhs,RowMajor,Specialized> { \ | ||||
|  static void run(Index _rows, Index _cols, const Scalar* _lhs, Index lhsStride, \ | ||||
|                                      const Scalar* _rhs, Index rhsIncr, Scalar* _res, Index resIncr, Scalar alpha) { \ | ||||
|  static void run(Index rows_, Index cols_, const Scalar* lhs_, Index lhsStride, \ | ||||
|                                      const Scalar* rhs_, Index rhsIncr, Scalar* res_, Index resIncr, Scalar alpha) { \ | ||||
|       triangular_matrix_vector_product_trmv<Index,Mode,Scalar,ConjLhs,Scalar,ConjRhs,RowMajor>::run( \ | ||||
|         _rows, _cols, _lhs, lhsStride, _rhs, rhsIncr, _res, resIncr, alpha); \ | ||||
|         rows_, cols_, lhs_, lhsStride, rhs_, rhsIncr, res_, resIncr, alpha); \ | ||||
|   } \ | ||||
| }; | ||||
| 
 | ||||
| @ -84,23 +84,23 @@ struct triangular_matrix_vector_product_trmv<Index,Mode,EIGTYPE,ConjLhs,EIGTYPE, | ||||
|     IsZeroDiag  = (Mode&ZeroDiag) ? 1 : 0, \ | ||||
|     LowUp = IsLower ? Lower : Upper \ | ||||
|   }; \ | ||||
|  static void run(Index _rows, Index _cols, const EIGTYPE* _lhs, Index lhsStride, \ | ||||
|                  const EIGTYPE* _rhs, Index rhsIncr, EIGTYPE* _res, Index resIncr, EIGTYPE alpha) \ | ||||
|  static void run(Index rows_, Index cols_, const EIGTYPE* lhs_, Index lhsStride, \ | ||||
|                  const EIGTYPE* rhs_, Index rhsIncr, EIGTYPE* res_, Index resIncr, EIGTYPE alpha) \ | ||||
|  { \ | ||||
|    if (ConjLhs || IsZeroDiag) { \ | ||||
|      triangular_matrix_vector_product<Index,Mode,EIGTYPE,ConjLhs,EIGTYPE,ConjRhs,ColMajor,BuiltIn>::run( \ | ||||
|        _rows, _cols, _lhs, lhsStride, _rhs, rhsIncr, _res, resIncr, alpha); \ | ||||
|        rows_, cols_, lhs_, lhsStride, rhs_, rhsIncr, res_, resIncr, alpha); \ | ||||
|      return; \ | ||||
|    }\ | ||||
|    Index size = (std::min)(_rows,_cols); \ | ||||
|    Index rows = IsLower ? _rows : size; \ | ||||
|    Index cols = IsLower ? size : _cols; \ | ||||
|    Index size = (std::min)(rows_,cols_); \ | ||||
|    Index rows = IsLower ? rows_ : size; \ | ||||
|    Index cols = IsLower ? size : cols_; \ | ||||
| \ | ||||
|    typedef VectorX##EIGPREFIX VectorRhs; \ | ||||
|    EIGTYPE *x, *y;\ | ||||
| \ | ||||
| /* Set x*/ \ | ||||
|    Map<const VectorRhs, 0, InnerStride<> > rhs(_rhs,cols,InnerStride<>(rhsIncr)); \ | ||||
|    Map<const VectorRhs, 0, InnerStride<> > rhs(rhs_,cols,InnerStride<>(rhsIncr)); \ | ||||
|    VectorRhs x_tmp; \ | ||||
|    if (ConjRhs) x_tmp = rhs.conjugate(); else x_tmp = rhs; \ | ||||
|    x = x_tmp.data(); \ | ||||
| @ -124,24 +124,24 @@ struct triangular_matrix_vector_product_trmv<Index,Mode,EIGTYPE,ConjLhs,EIGTYPE, | ||||
|    diag = IsUnitDiag ? 'U' : 'N'; \ | ||||
| \ | ||||
| /* call ?TRMV*/ \ | ||||
|    BLASPREFIX##trmv##BLASPOSTFIX(&uplo, &trans, &diag, &n, (const BLASTYPE*)_lhs, &lda, (BLASTYPE*)x, &incx); \ | ||||
|    BLASPREFIX##trmv##BLASPOSTFIX(&uplo, &trans, &diag, &n, (const BLASTYPE*)lhs_, &lda, (BLASTYPE*)x, &incx); \ | ||||
| \ | ||||
| /* Add op(a_tr)rhs into res*/ \ | ||||
|    BLASPREFIX##axpy##BLASPOSTFIX(&n, (const BLASTYPE*)&numext::real_ref(alpha),(const BLASTYPE*)x, &incx, (BLASTYPE*)_res, &incy); \ | ||||
|    BLASPREFIX##axpy##BLASPOSTFIX(&n, (const BLASTYPE*)&numext::real_ref(alpha),(const BLASTYPE*)x, &incx, (BLASTYPE*)res_, &incy); \ | ||||
| /* Non-square case - doesn't fit to BLAS ?TRMV. Fall to default triangular product*/ \ | ||||
|    if (size<(std::max)(rows,cols)) { \ | ||||
|      if (ConjRhs) x_tmp = rhs.conjugate(); else x_tmp = rhs; \ | ||||
|      x = x_tmp.data(); \ | ||||
|      if (size<rows) { \ | ||||
|        y = _res + size*resIncr; \ | ||||
|        a = _lhs + size; \ | ||||
|        y = res_ + size*resIncr; \ | ||||
|        a = lhs_ + size; \ | ||||
|        m = convert_index<BlasIndex>(rows-size); \ | ||||
|        n = convert_index<BlasIndex>(size); \ | ||||
|      } \ | ||||
|      else { \ | ||||
|        x += size; \ | ||||
|        y = _res; \ | ||||
|        a = _lhs + size*lda; \ | ||||
|        y = res_; \ | ||||
|        a = lhs_ + size*lda; \ | ||||
|        m = convert_index<BlasIndex>(size); \ | ||||
|        n = convert_index<BlasIndex>(cols-size); \ | ||||
|      } \ | ||||
| @ -173,23 +173,23 @@ struct triangular_matrix_vector_product_trmv<Index,Mode,EIGTYPE,ConjLhs,EIGTYPE, | ||||
|     IsZeroDiag  = (Mode&ZeroDiag) ? 1 : 0, \ | ||||
|     LowUp = IsLower ? Lower : Upper \ | ||||
|   }; \ | ||||
|  static void run(Index _rows, Index _cols, const EIGTYPE* _lhs, Index lhsStride, \ | ||||
|                  const EIGTYPE* _rhs, Index rhsIncr, EIGTYPE* _res, Index resIncr, EIGTYPE alpha) \ | ||||
|  static void run(Index rows_, Index cols_, const EIGTYPE* lhs_, Index lhsStride, \ | ||||
|                  const EIGTYPE* rhs_, Index rhsIncr, EIGTYPE* res_, Index resIncr, EIGTYPE alpha) \ | ||||
|  { \ | ||||
|    if (IsZeroDiag) { \ | ||||
|      triangular_matrix_vector_product<Index,Mode,EIGTYPE,ConjLhs,EIGTYPE,ConjRhs,RowMajor,BuiltIn>::run( \ | ||||
|        _rows, _cols, _lhs, lhsStride, _rhs, rhsIncr, _res, resIncr, alpha); \ | ||||
|        rows_, cols_, lhs_, lhsStride, rhs_, rhsIncr, res_, resIncr, alpha); \ | ||||
|      return; \ | ||||
|    }\ | ||||
|    Index size = (std::min)(_rows,_cols); \ | ||||
|    Index rows = IsLower ? _rows : size; \ | ||||
|    Index cols = IsLower ? size : _cols; \ | ||||
|    Index size = (std::min)(rows_,cols_); \ | ||||
|    Index rows = IsLower ? rows_ : size; \ | ||||
|    Index cols = IsLower ? size : cols_; \ | ||||
| \ | ||||
|    typedef VectorX##EIGPREFIX VectorRhs; \ | ||||
|    EIGTYPE *x, *y;\ | ||||
| \ | ||||
| /* Set x*/ \ | ||||
|    Map<const VectorRhs, 0, InnerStride<> > rhs(_rhs,cols,InnerStride<>(rhsIncr)); \ | ||||
|    Map<const VectorRhs, 0, InnerStride<> > rhs(rhs_,cols,InnerStride<>(rhsIncr)); \ | ||||
|    VectorRhs x_tmp; \ | ||||
|    if (ConjRhs) x_tmp = rhs.conjugate(); else x_tmp = rhs; \ | ||||
|    x = x_tmp.data(); \ | ||||
| @ -213,24 +213,24 @@ struct triangular_matrix_vector_product_trmv<Index,Mode,EIGTYPE,ConjLhs,EIGTYPE, | ||||
|    diag = IsUnitDiag ? 'U' : 'N'; \ | ||||
| \ | ||||
| /* call ?TRMV*/ \ | ||||
|    BLASPREFIX##trmv##BLASPOSTFIX(&uplo, &trans, &diag, &n, (const BLASTYPE*)_lhs, &lda, (BLASTYPE*)x, &incx); \ | ||||
|    BLASPREFIX##trmv##BLASPOSTFIX(&uplo, &trans, &diag, &n, (const BLASTYPE*)lhs_, &lda, (BLASTYPE*)x, &incx); \ | ||||
| \ | ||||
| /* Add op(a_tr)rhs into res*/ \ | ||||
|    BLASPREFIX##axpy##BLASPOSTFIX(&n, (const BLASTYPE*)&numext::real_ref(alpha),(const BLASTYPE*)x, &incx, (BLASTYPE*)_res, &incy); \ | ||||
|    BLASPREFIX##axpy##BLASPOSTFIX(&n, (const BLASTYPE*)&numext::real_ref(alpha),(const BLASTYPE*)x, &incx, (BLASTYPE*)res_, &incy); \ | ||||
| /* Non-square case - doesn't fit to BLAS ?TRMV. Fall to default triangular product*/ \ | ||||
|    if (size<(std::max)(rows,cols)) { \ | ||||
|      if (ConjRhs) x_tmp = rhs.conjugate(); else x_tmp = rhs; \ | ||||
|      x = x_tmp.data(); \ | ||||
|      if (size<rows) { \ | ||||
|        y = _res + size*resIncr; \ | ||||
|        a = _lhs + size*lda; \ | ||||
|        y = res_ + size*resIncr; \ | ||||
|        a = lhs_ + size*lda; \ | ||||
|        m = convert_index<BlasIndex>(rows-size); \ | ||||
|        n = convert_index<BlasIndex>(size); \ | ||||
|      } \ | ||||
|      else { \ | ||||
|        x += size; \ | ||||
|        y = _res; \ | ||||
|        a = _lhs + size; \ | ||||
|        y = res_; \ | ||||
|        a = lhs_ + size; \ | ||||
|        m = convert_index<BlasIndex>(size); \ | ||||
|        n = convert_index<BlasIndex>(cols-size); \ | ||||
|      } \ | ||||
|  | ||||
| @ -93,9 +93,9 @@ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,C | ||||
| 
 | ||||
|   static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) | ||||
|   { | ||||
|     remove_all_t<ResultType> _res(res.rows(), res.cols()); | ||||
|     internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,ResultType>(lhs, rhs, _res, tolerance); | ||||
|     res.swap(_res); | ||||
|     remove_all_t<ResultType> res_(res.rows(), res.cols()); | ||||
|     internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,ResultType>(lhs, rhs, res_, tolerance); | ||||
|     res.swap(res_); | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| @ -107,9 +107,9 @@ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,ColMajor,C | ||||
|   { | ||||
|     // we need a col-major matrix to hold the result
 | ||||
|     typedef SparseMatrix<typename ResultType::Scalar,ColMajor,typename ResultType::StorageIndex> SparseTemporaryType; | ||||
|     SparseTemporaryType _res(res.rows(), res.cols()); | ||||
|     internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,SparseTemporaryType>(lhs, rhs, _res, tolerance); | ||||
|     res = _res; | ||||
|     SparseTemporaryType res_(res.rows(), res.cols()); | ||||
|     internal::sparse_sparse_product_with_pruning_impl<Lhs,Rhs,SparseTemporaryType>(lhs, rhs, res_, tolerance); | ||||
|     res = res_; | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| @ -120,9 +120,9 @@ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,R | ||||
|   static void run(const Lhs& lhs, const Rhs& rhs, ResultType& res, const RealScalar& tolerance) | ||||
|   { | ||||
|     // let's transpose the product to get a column x column product
 | ||||
|     remove_all_t<ResultType> _res(res.rows(), res.cols()); | ||||
|     internal::sparse_sparse_product_with_pruning_impl<Rhs,Lhs,ResultType>(rhs, lhs, _res, tolerance); | ||||
|     res.swap(_res); | ||||
|     remove_all_t<ResultType> res_(res.rows(), res.cols()); | ||||
|     internal::sparse_sparse_product_with_pruning_impl<Rhs,Lhs,ResultType>(rhs, lhs, res_, tolerance); | ||||
|     res.swap(res_); | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| @ -140,9 +140,9 @@ struct sparse_sparse_product_with_pruning_selector<Lhs,Rhs,ResultType,RowMajor,R | ||||
| 
 | ||||
|     // let's transpose the product to get a column x column product
 | ||||
| //     typedef SparseMatrix<typename ResultType::Scalar> SparseTemporaryType;
 | ||||
| //     SparseTemporaryType _res(res.cols(), res.rows());
 | ||||
| //     sparse_sparse_product_with_pruning_impl<Rhs,Lhs,SparseTemporaryType>(rhs, lhs, _res);
 | ||||
| //     res = _res.transpose();
 | ||||
| //     SparseTemporaryType res_(res.cols(), res.rows());
 | ||||
| //     sparse_sparse_product_with_pruning_impl<Rhs,Lhs,SparseTemporaryType>(rhs, lhs, res_);
 | ||||
| //     res = res_.transpose();
 | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -125,6 +125,10 @@ struct imag {}; | ||||
| // B0 is defined in POSIX header termios.h
 | ||||
| #define B0 FORBIDDEN_IDENTIFIER | ||||
| #define I  FORBIDDEN_IDENTIFIER | ||||
| 
 | ||||
| // _res is defined by resolv.h
 | ||||
| #define _res FORBIDDEN_IDENTIFIER | ||||
| 
 | ||||
| // Unit tests calling Eigen's blas library must preserve the default blocking size
 | ||||
| // to avoid troubles.
 | ||||
| #ifndef EIGEN_NO_DEBUG_SMALL_PRODUCT_BLOCKS | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Antonio Sánchez
						Antonio Sánchez