inline DMatrixSlice::DMatrixSlice( DMatrixSlice& gms, const Range1D& I , const Range1D& J) : ptr_( gms.col_ptr(1) + (I.lbound() - 1) + (J.lbound() - 1) * gms.max_rows() ) , max_rows_(gms.max_rows()) , rows_(I.size()) , cols_(J.size()) { gms.validate_row_subscript(I.ubound()); gms.validate_col_subscript(J.ubound()); }
void DenseLinAlgPack::syr2k(BLAS_Cpp::Transp trans,value_type alpha, const DMatrixSlice& gms_rhs1 , const DMatrixSlice& gms_rhs2, value_type beta, DMatrixSliceSym* sym_lhs) { Mp_MtM_assert_sizes( sym_lhs->gms().rows(), sym_lhs->gms().cols(), BLAS_Cpp::no_trans , gms_rhs1.rows(), gms_rhs1.cols(), trans , gms_rhs2.rows(), gms_rhs2.cols(), trans_not(trans) ); BLAS_Cpp::syr2k(sym_lhs->uplo(),trans,sym_lhs->gms().rows() ,cols(gms_rhs1.rows(), gms_rhs1.cols(), trans),alpha ,gms_rhs1.col_ptr(1),gms_rhs1.max_rows() ,gms_rhs2.col_ptr(1),gms_rhs2.max_rows(),beta ,sym_lhs->gms().col_ptr(1),sym_lhs->gms().max_rows() ); }
void DenseLinAlgPack::Mp_StMtM(DMatrixSlice* gms_lhs, value_type alpha, const DMatrixSlice& gms_rhs1 , BLAS_Cpp::Transp trans_rhs1, const DMatrixSlice& gms_rhs2 , BLAS_Cpp::Transp trans_rhs2, value_type beta) { Mp_MtM_assert_sizes( gms_lhs->rows(), gms_lhs->cols(), BLAS_Cpp::no_trans , gms_rhs1.rows(), gms_rhs1.cols(), trans_rhs1 , gms_rhs2.rows(), gms_rhs2.cols(), trans_rhs2); BLAS_Cpp::gemm(trans_rhs1,trans_rhs2,gms_lhs->rows(),gms_lhs->cols() ,cols(gms_rhs1.rows(),gms_rhs1.cols(),trans_rhs1) ,alpha,gms_rhs1.col_ptr(1),gms_rhs1.max_rows() ,gms_rhs2.col_ptr(1),gms_rhs2.max_rows() ,beta,gms_lhs->col_ptr(1),gms_lhs->max_rows() ); }
void DenseLinAlgPack::Vp_StMtV(DVectorSlice* vs_lhs, value_type alpha, const DMatrixSlice& gms_rhs1 , BLAS_Cpp::Transp trans_rhs1, const DVectorSlice& vs_rhs2, value_type beta) { Vp_MtV_assert_sizes(vs_lhs->dim(), gms_rhs1.rows() , gms_rhs1.cols(), trans_rhs1 , vs_rhs2.dim()); BLAS_Cpp::gemv(trans_rhs1,gms_rhs1.rows(),gms_rhs1.cols(),alpha,gms_rhs1.col_ptr(1) ,gms_rhs1.max_rows(), vs_rhs2.raw_ptr(),vs_rhs2.stride(),beta,vs_lhs->raw_ptr() ,vs_lhs->stride()); }